Pokaż wyniki 1 do 9 z 9

Temat: [PERL] Modyfikacja wyrazenia regularnego

  1. #1
    Zarejestrowany
    Nov 2009
    Postów
    5

    Domyślnie [PERL] Modyfikacja wyrazenia regularnego

    Witam. Jestem zielony w temacie perla, a musze koniecznie przerobic pewne wyrazenie regularne... Nie wiem jak sobie poradzic z czyms takim, prawde mowiac, nie wiem czy jest to poprawne skladniowo czy nie.
    Tak wyglada oryginalne wyrazenie regularne
    #<a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="([^"]*)" [^>]*?>

    Moja modyfikacja polegalaby na dodaniu za onClick="doSubmit='
    ten kawalek jest w javie...
    Nie wiem jak powinno to zostac zapisane, aby zostalo poprawnie przez perla zinterpretowane (chodzi mi glownie o ' za submit)

    <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="([^doSubmit='account_"])" [^>]*?>

    z gory dziekuje za pomoc

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    1. nie w javie ale w javascript
    2. chcesz uzyc regexa do edycji czy do zlapania danychktore masz w nieco innym formacie?

    Podaj przyklad tego co masz na wejsciu i tego co chcesz miec na wyjsciu to pogadamy.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3
    Zarejestrowany
    Nov 2009
    Postów
    5

    Domyślnie

    Oczywiscie, masz racje - chodzi o javascript :-)
    Wyrazenie ktore podalem jako pierwsze lapie to co trzeba, a nawet wiecej. Jeszcze raz

    Tak wyglada oryginalne wyrazenie regularne
    #<a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="([^"]*)" [^>]*?>

    tak wyglada kawalek kodu w htmlu, ktory pasuje do wzorca
    <p class="Account">
    <a id="AccountsGrid_grid_ctl02_MLink_0_0" title="Wybierz ten rachunek" onclick="doSubmit('account_details.aspx','','POST' ,'jX+4yQigsXKVpZzD57noale9iTkPxSvFj9kWLKuLDwsctwgs fUSvcMaPnujuvXK+IUZ7Ps0HHSpw+xi92mD0DkU0pQsICYhMpT uKH+MC3d5/yTr7VoSZ/wGdRx7GzjEN5elhjaYV5zfns0pdbmqEqK6bXHTDusqw3NE3Agb ek7RhUWhe2DVhtIJwfCEaxe5c7aKh5K7zeCgPnr9HeEGQT0J9M HRvBsAQds3J32jbDFU=',false,false,false,null); return false;" onmouseover="window.status = ''; return true;" href="#">konto</a>
    </p>

    <p class="Amount">
    <a id="AccountsGrid_grid_ctl02_MLink_0_1" title="Zobacz operacje z ostatnich 14 dni" onclick="doSubmit('account_oper_list.aspx','','POS T','6gNiW6YG3RWkyBZsabKiOmXPQ/RMPOWQ6313noDJYkEMxyqC2X2t1V58wr38wb/hsrKJ4GasXu32VF9isfWc2S6CFuCkLzInz/0SU0xC/gjP6c1Q2n4MDYxQ98luOr6UXnLabYc+WubObs8WAWBNHfpZU9S c7yt0AI93tE1QdkE9EdGDMA9YvA5XonPYqOdU7Z6qQocBS2IJL wxqOoBPAGUbh8GtB8Ts01h8MsUo1O+HLRPIOP0/xLShwBlwZFUU',false,false,false,null); return false;" onmouseover="window.status = ''; return true;" href="#">120</a>
    </p>

    <p class="Amount">
    <span id="AccountsGrid_grid_ctl02_MLabel_0_2">120 PLN</span>
    </p>

    Jak pisalem wczesniej modyfikacja mialaby polegac na dodaniu za onClick= "doSubmit='account_+ reszta wzorca)
    <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="([^doSubmit=('account_])" [^>]*?>
    Chcialem w ten sposob zawezic pole poszukiwan, poniewaz jest jeszcze jedna linijka na stronie, ktora spelnia te warunki, a nie jest mi do niczego potrzebna (w onClick= zawiera "mobile_account")
    Mam nadzieje, ze dobrze to wyjasnilem.
    Ostatnio edytowane przez Taisa : 11-24-2009 - 11:47

  4. #4
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Tlumaczenie nie za dobre... gdybys nie napisal ze dodajesz kolejna linie i chcesz tylko ta linie lapac to bym nadal nie wiedzial o czym mowa... ale te regexy masz napisane tak kurewsko nieczytelnie - nie wiem kto to pisal ale regexow tak sie nie robi... jaki niby sens ma miec zapis [ ] - dokladnie taki sam jak po prostu spacja w tekscie wiec po co kombinowac i spowalniac wykonanie regexa?

    Podaj mi 3 linie tak jak sa w kodzie strony i powiedz ktore pola chcesz wylapac z tekstu... 3 linie mam na mysli przyklad linii ktora:
    1. pasuje do starego wzorca - tak jak masz teraz regex w kodzie
    2. ktora ma w tresci 'mobile_account' czyli ta co chcesz sie jej pozbyc
    3. liste pol ktore chcesz wylapac i uzyc pozniej w swoim skrypcie


    Tlumaczysz od duszy strony po prostu, pokazujesz kawalki kodu czesciowo zmodyfikowane, itd. Podaj jasno dane wejsciowe (regex juz podales wczesniej) i dane wyjsciowe to pokaze Ci jak to zrobic i wyjsnie gdzie zrobiles bledy... od razu wskazujac ze nie zajrzales do dokumentacji hihi.

    Czekam na dane
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  5. #5
    Zarejestrowany
    Nov 2009
    Postów
    5

    Domyślnie

    Wybacz nie wnikam, jak to jest napisane, bo to nie moje, to raz, po drugie z programowania jestem cienki, po trzecie na perlu kompletnie sie nie znam, a wyrazenia regularne w tym momencie sprawiaja mi problem (za duzo znakow specjalnych) Jedyne co chce, to zmodyfikowac to wyrazenie.

    prosze bardzo, tak wyglada calosc

    $accounts_re = qr{
    <p[ ]class="Account">
    <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="([^"]*)" [^>]*?>
    (.+?) [ ] (\d\d[ ]\d\d\d\d[ ]\d\d\d\d[ ]\d\d\d\d[ ]\d\d\d\d[ ]\d\d\d\d[ ]\d\d\d\d)
    </a>

    </p>
    <p[ ]class="Amount">
    <a[ ]id="\w+"[ ]title="Zobacz[ ]operacje[ ]z[ ]ostatnich[ ]14[ ]dni" [^>]*? onclick="([^"]*)" [^>]*?>
    (-?[0-9 ,]+) [ ] ([A-Z]+)
    </a>
    </p>
    <p[ ]class="Amount">
    <span[ ]id="\w+">
    (-?[0-9 ,]+) [ ] ([A-Z]+)
    </span>
    </p>
    }x;

    Wytluscilem linijke, ktora musze zmodyfikowac...

    Wg powyzszego wzorca (tylko do tej pogrubionej linii pasuje)

    <a id="AccountsGrid_grid_ctl02_MLink_0_0" title="Wybierz ten rachunek" onclick="doSubmit('account_details.aspx','','POST' ,'jX+4yQigsXKVpZzD57noale9iTkPxSvFj9kWLKuLDwsctwgs fUSvcMaPnujuvXK+IUZ7Ps0HHSpw+xi92mD0DkU0pQsICYhMpT uKH+MC3d5/yTr7VoSZ/wGdRx7GzjEN5elhjaYV5zfns0pdbmqEqK6bXHTDusqw3NE3Agb ek7RhUWhe2DVhtIJwfCEaxe5c7aKh5K7zeCgPnr9HeEGQT0J9M HRvBsAQds3J32jbDFU=',false,false,false,null); return false;" onmouseover="window.status = ''; return true;" href="#">konto</a>

    pasuje rowniez

    <a id="AccountsGrid_grid_ctl03_MLink_1_0" title="Wybierz ten rachunek" onclick="doSubmit('mobile_account_details.aspx','','POST','TlHUkx6aP1SCCC/4beAwuzygn6UpNbcE7djy4nsngQQU8iWp+mf7VOQDbIEW+gwb0 eQgItu53MWYvV6drtV5m39e2l3L2gVzUiFLOlhYRMDGnrdbl9n 7v6+vXUeESqrctrcineVfdiFUq9LtvxbjCpThzv9cWVVj8B6BQ zJTd6eX5+hSBT4D3xDzeS7CbJtc8Ezh+H6d6iXBpDgrS3XOYRt WVTFyLVI+6YlAQvaK+dhF+7yt8LVwjbGpb+tdfqnovUy3DaT2K ShksCzWJ2r9IA==',false,false,false,null); return false;" onmouseover="window.status = ''; return true;" href="#">Konto MOBILE</a>

    I tego powyzej chce sie pozbyc - wystarczyloby IMO uscislic wzorzec oryginalny
    <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="([^"]*)" [^>]*?>
    (.+?) [ ] (\d\d[ ]\d\d\d\d[ ]\d\d\d\d[ ]\d\d\d\d[ ]\d\d\d\d[ ]\d\d\d\d[ ]\d\d\d\d)
    </a>


    dodajac cos takiego (sugeruje tylko co powinno sie tam znalezc, nie poprawny zapis)

    <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="doSubmit=('account_) [^>]*?>
    (.+?) [ ] (\d\d[ ]\d\d\d\d[ ]\d\d\d\d[ ]\d\d\d\d[ ]\d\d\d\d[ ]\d\d\d\d[ ]\d\d\d\d)
    </a>

    Chodzi mi tylko o wskazanie poprawnego zapisu wytluszczonego powyzej kawalka

  6. #6
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Jasna sprawa - nie kazdy musi sie znac na wszystkim wiec nie ma problemu.

    W najwiekszym mozliwym skrocie:
    Kod:
    <a\s+id="\w+"\s+title="Wybierz\s+ten\s+rachunek"\s+onclick="doSubmit=('account_.+?>
    to bedzie pierwsza linia...

    Dlaczego zastapilem Twoje [ ] zapisem \s+ - to proste...

    [ ] - jednoelementowa klasa znakow zawierajaca tylko spacje
    \s+ - jeden lub wiecej znakow bialych (spacja, tabulacja)

    [ ] oznacza DOKLADNIE jedna spacje wiec rownie dobrze mozna to zapisac jako spacja i zapomniec o klamrach. Druga sprawa jest taka, ze dodawales warunki typu [^>]> co oznacza dowolny znak przed > nie bedacy > czyli negacja znakow w jednoelementowej grupie... a wiec jak dopisales

    [^doSubmit...] to uzyskales nie negacje ciagu jak chciales ale negacje dla znakow: d o S u b m i t = ..... i tak dalej. [] sluzy do grupowania pojedynczych znakow.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  7. #7
    Zarejestrowany
    Nov 2009
    Postów
    5

    Domyślnie

    OK, dzieki za wyjasnienie. W kazdym razie burzy sie o doSubmit=('account_.+?>

  8. #8
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    ( ma specjalne znaczenie w regexach wiec jesli ma pretensje o nawiasy to poprzedz je \ czyli \( - oznacza to ze nawias (znak po backslash'u) ma byc traktowany doslownie - powinno pomoc
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  9. #9
    Zarejestrowany
    Nov 2009
    Postów
    5

    Domyślnie

    Dzieki, doczytalem wczoraj w jakims kursie. Niestety tak skonstruowany wzorzec nie lapie nic :-((( Probowalem na rozne sposoby, albo lapie wszystko, albo nic :-(

Podobne wątki

  1. Modyfikacja programu wg.pl w PERL
    By Pablik in forum Perl/Python/TCL/Prolog
    Odpowiedzi: 4
    Autor: 11-08-2009, 14:27
  2. Odpowiedzi: 18
    Autor: 07-14-2009, 12:55
  3. Modyfikacja pakietu.
    By kenken in forum Newbie - dla początkujących!
    Odpowiedzi: 4
    Autor: 10-15-2008, 13:32
  4. Odpowiedzi: 31
    Autor: 05-20-2008, 18:01
  5. modyfikacja forum
    By anonim01 in forum Inne metody
    Odpowiedzi: 1
    Autor: 01-14-2008, 18:04

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj