🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
5 messages
5 total messages Started by Kap Tue, 24 Nov 2009 23:20
Wyrazenie regularne - jak poprawic... [Dlugie]
#51678
Author: Kap
Date: Tue, 24 Nov 2009 23:20
73 lines
3271 bytes
Witam. Mam taki problem kurcze i nie wiem jak to obejsc. Perla nie znam 
praktycznie wcale. Mam oto taki kodzik (nie moj) i musze go delikatnie 
zmodyfikowac. Wyrazenie filtruje kod html strony...

ponizej mam wzorzec (caly)

$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;

dokladnie chodzi o linijke

<a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="([^"]*)"

Do wzorca (tylko do wyzej znajdujacego sie kawalka)

pasuje taki kod znajdujacy sie w pliku html

<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="#">

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="#">

I tego powyzej chce sie pozbyc - wystarczyloby chyba uscislic wzorzec 
oryginalny

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

dodajac np doSubmit=('account_i dalej no wlasnie...

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


nie wiem co dalej i jak ten kawalek powinien byc zapisany
bo wystapilby tam nawias "(" oraz "'"

Wszystkie moje wysilki spelzly na niczym :-(((
Dlatego prosze o pomoc.

Kap
Re: Wyrazenie regularne - jak poprawic... [Dlugie]
#51679
Author: Szymon Sokół
Date: Wed, 25 Nov 2009 00:04
15 lines
1804 bytes
On Wed, 25 Nov 2009 00:20:54 +0100, Kap wrote:

> nie wiem co dalej i jak ten kawalek powinien byc zapisany
> bo wystapilby tam nawias "(" oraz "'"

Znak ' (apostrof) nie ma specjalnego znaczenia w regexpach, więc możesz go
po prostu użyć. Znaki mające znaczenie specjalne (w tym nawiasy) należy
poprzedzać znakiem \ (backslash), jeśli chce się, żeby były zinterpretowane
literalnie.

-- 
Szymon Sokół (SS316-RIPE) -- Network Manager                                 B
Computer Center, AGH - University of Science and Technology, Cracow, Poland  O
http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982  F
Free speech includes the right not to listen, if not interested -- Heinlein  H
Re: Wyrazenie regularne - jak poprawic... [Dlugie]
#51680
Author: Paweł Matejski
Date: Wed, 25 Nov 2009 00:44
34 lines
2218 bytes
Kap wrote:
> 
> dokladnie chodzi o linijke
> 
> <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="([^"]*)"
> 
> Do wzorca (tylko do wyzej znajdujacego sie kawalka)
> 
> 
> I tego powyzej chce sie pozbyc - wystarczyloby chyba uscislic wzorzec
> oryginalny
> 
> <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="([^"]*)" [^>]*?>
> 
> dodajac np doSubmit=('account_i dalej no wlasnie...
> 

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

Coś takiego?

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

> nie wiem co dalej i jak ten kawalek powinien byc zapisany
> bo wystapilby tam nawias "(" oraz "'"

Problem był w początku. Nawias po onclick=" jest potrzebny, bo zapewne zawartość "" jest gdzieś później wykorzystywana,
Nawias który ma być dopasowany należy wyeskajpować. Apostrof można wstawić bezpośrednio, nie ma tu specjalnego
znaczenia. Natomiast późniejsze wystąpienia nawiasu i apostrofu łapią się w [^"]* - oznacza to dowolny ciąg znaków nie
zawierający ".
Dodam, że obecna moja wersja dopasuje wszystko co jako pierwszy parametr doSubmit ma tekst rozpoczynający się od account_

-- 
P.M.
Re: Wyrazenie regularne - jak poprawic... [Dlugie]
#51681
Author: Kap
Date: Wed, 25 Nov 2009 05:50
55 lines
3146 bytes
Paweł Matejski pisze:
> Kap wrote:
>> dokladnie chodzi o linijke
>>
>> <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="([^"]*)"
>>
>> Do wzorca (tylko do wyzej znajdujacego sie kawalka)
>>
>>
>> I tego powyzej chce sie pozbyc - wystarczyloby chyba uscislic wzorzec
>> oryginalny
>>
>> <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="([^"]*)" [^>]*?>
>>
>> dodajac np doSubmit=('account_i dalej no wlasnie...
>>
> 
>> <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ onclick="doSubmit=('account_) [^>]*?>
> 
> Coś takiego?
> 
> <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="(doSubmit=\('account_[^"]*)" [^>]*?>
> 
>> nie wiem co dalej i jak ten kawalek powinien byc zapisany
>> bo wystapilby tam nawias "(" oraz "'"
> 
> Problem był w początku. Nawias po onclick=" jest potrzebny, bo zapewne zawartość "" jest gdzieś później wykorzystywana,
> Nawias który ma być dopasowany należy wyeskajpować. Apostrof można wstawić bezpośrednio, nie ma tu specjalnego
> znaczenia. Natomiast późniejsze wystąpienia nawiasu i apostrofu łapią się w [^"]* - oznacza to dowolny ciąg znaków nie
> zawierający ".
> Dodam, że obecna moja wersja dopasuje wszystko co jako pierwszy parametr doSubmit ma tekst rozpoczynający się od account_
> 

Dzieki za odpowiedz, naprowadziliscie mnie.
Niestety podany wzorzec, nie dziala - nie lapie nic

po zmodyfikowaniu do takiej postaci (dodalem nawiasy [ ] - wiadomo)
  <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ 
]onclick="([doSubmit=\('account_]+[^"]*)" [^>]*?>

lapie, ale zgodnie z oczekiwaniami - jak wzor pierwotny - wszystkie 
doSubmit...
:-/

Dla przypomnienia tak wyglada linia
<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="#">

Kap
Re: Wyrazenie regularne - jak poprawic... [Dlugie]
#51682
Author: Kap
Date: Wed, 25 Nov 2009 13:57
81 lines
3819 bytes
Kap pisze:
> Witam. Mam taki problem kurcze i nie wiem jak to obejsc. Perla nie znam 
> praktycznie wcale. Mam oto taki kodzik (nie moj) i musze go delikatnie 
> zmodyfikowac. Wyrazenie filtruje kod html strony...
> 
> ponizej mam wzorzec (caly)
> 
> $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;
> 
> dokladnie chodzi o linijke
> 
> <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="([^"]*)"
> 
> Do wzorca (tylko do wyzej znajdujacego sie kawalka)
> 
> pasuje taki kod znajdujacy sie w pliku html
> 
> <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="#">
> 
> 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="#">
> 
> I tego powyzej chce sie pozbyc - wystarczyloby chyba uscislic wzorzec 
> oryginalny
> 
> <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ ]onclick="([^"]*)" 
> [^>]*?>
> 
> dodajac np doSubmit=('account_i dalej no wlasnie...
> 
> <a[ ]id="\w+"[ ]title="Wybierz[ ]ten[ ]rachunek"[ 
> onclick="doSubmit=('account_) [^>]*?>
> 
> 
> nie wiem co dalej i jak ten kawalek powinien byc zapisany
> bo wystapilby tam nawias "(" oraz "'"
> 
> Wszystkie moje wysilki spelzly na niczym :-(((
> Dlatego prosze o pomoc.
> 
> Kap

W porzdku Panowie, poradzilem sobie. Za rada znajomego dodalem ifa w 
petli przeszukujacej kod html przed wzorcem znajdujacym sie powyzej. W 
ifie dolozylem wyszukiwanie slowa mobile zeby odsiac niepotrzebna fraze.
Najwazniejsze ze dziala.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads