[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Jacek Rudowski

4/16/2007 3:20:00 PM


Witam.

W sumie zagadnienie jest w pewnym sensie programistyczne, wiec probuje tutaj
szczescia.
Potrzebuje przy pomocy wyrazen regularnych wybrac tylko pliki, ktore
_nie_ sa plikami .php.

Akurat w tym konkretnym przypadku do konfigu Apache'a akurat.
Tak czy inaczej, jak rozumiem takie proste wyrazenie

[^(.php)]$

bedzie zbyt proste?
Nawiasy okragle jako znaki specjalne operatora tworzenia grupy beda zignorowane
i potraktowane jako zwykle znaki?

Ew. cos takiego?

..*[^p][^h][^p]$

Bede wdzieczny za wszelkie podpowiedzi regexpowych wyjadaczy.

Pozdrawiam
--
Jacek "AMI" Rudowski
10 Answers

Mariusz Kruk

4/16/2007 4:02:00 PM

0

epsilon$ while read LINE; do echo ">$LINE"; done < Jacek Rudowski
>W sumie zagadnienie jest w pewnym sensie programistyczne, wiec probuje tutaj
>szczescia.
>Potrzebuje przy pomocy wyrazen regularnych wybrac tylko pliki, ktore
>_nie_ sa plikami .php.
>
>Akurat w tym konkretnym przypadku do konfigu Apache'a akurat.
>Tak czy inaczej, jak rozumiem takie proste wyrazenie
>
>[^(.php)]$
>
>bedzie zbyt proste?

No, bedzie cokolwiek dziwne. Je?li to s? "zwyk3e" regekspy, to usi3ujesz
znale?a ci?g, który nie konczy sie nawiasem, kropk?, 'p' albo 'h'.

>Nawiasy okragle jako znaki specjalne operatora tworzenia grupy beda zignorowane
>i potraktowane jako zwykle znaki?

Oczywi?cie.

>Ew. cos takiego?
>
>.*[^p][^h][^p]$

To z kolei zignoruje te? np. "aaaaaa.ppp" albo "yyyy.hhh".

Mam wra?enie, ?e regexp przyjmuj?cy wszystko za wyj?tkiem "php$" bedzie
ciut zawi3y, ale moge sie mylia.
--
\.\.\.\.\.\.\.\.\.\.\.\.\.\ Everybody should believe in something, I be-
..\.Kruk@epsilon.eu.org.\.\. lieve I'll have another drink.
\.http://epsil...\.\
..\.\.\.\.\.\.\.\.\.\.\.\.\.

Jacek Rudowski

4/16/2007 4:34:00 PM

0

On 2007-04-16, Mariusz Kruk <Mariusz.Kruk@epsilon.eu.org> wrote:
>>[^(.php)]$
>>
>>bedzie zbyt proste?
>
> No, bedzie cokolwiek dziwne. Je?li to s? "zwyk3e" regekspy, to usi3ujesz
> znale?a ci?g, który nie konczy sie nawiasem, kropk?, 'p' albo 'h'.

Taa... :) regexpy zawsze mnie przerazaly.

>>Ew. cos takiego?
>>
>>.*[^p][^h][^p]$
>
> To z kolei zignoruje te? np. "aaaaaa.ppp" albo "yyyy.hhh".

Hm... i tego chyba wlasnie do konca nie kumam.
To nie jest tak, ze pasowac bedzie to, co ma na cokolwiek, potem nie ma p, za
ktorym nie ma h, za ktorym nie ma znow p? :)
Juz to brzmi zawile. Byc moze gdzies popelniam blad logiczny.

> Mam wra?enie, ?e regexp przyjmuj?cy wszystko za wyj?tkiem "php$" bedzie
> ciut zawi3y, ale moge sie mylia.

A tego sie obawiam - zwlaszcza przy mojej, jak widac, biednej znajomosci
regexpow.

Dzieki w kazdym razie za naprostowanie - drugi przyklad najwyrazniej musze
jeszcze przemyslec.

Pozdrawiam
--
Jacek "AMI" Rudowski

hubert depesz lubaczewski

4/16/2007 4:52:00 PM

0

On 2007-04-16, Jacek Rudowski <ami@_usunto_wkurw.org> wrote:
> W sumie zagadnienie jest w pewnym sensie programistyczne, wiec probuje tutaj
> szczescia.
> Potrzebuje przy pomocy wyrazen regularnych wybrac tylko pliki, ktore
> _nie_ sa plikami .php.

1. typów wyra?en regularnych jest kilka ró?nych. wzajemnie niekompatybilnych.

2. tego co chcesz prosto sie ogólnie nie da.

3. zak3adaj?c, ?e u?ywasz pcre albo pochodnych, mo?esz:
(?<!\.php)$

depesz

--
quicksil1er: "postgres is excellent, but like any DB it requires a
highly paid DBA. here's my CV!" :)
http://www.d... - blog dla ciebie (i moje CV)

Mariusz Kruk

4/16/2007 5:27:00 PM

0

epsilon$ while read LINE; do echo ">$LINE"; done < Jacek Rudowski
>>>Ew. cos takiego?
>>>.*[^p][^h][^p]$
>> To z kolei zignoruje te? np. "aaaaaa.ppp" albo "yyyy.hhh".
>Hm... i tego chyba wlasnie do konca nie kumam.
>To nie jest tak, ze pasowac bedzie to, co ma na cokolwiek, potem nie ma p, za
>ktorym nie ma h, za ktorym nie ma znow p? :)
>Juz to brzmi zawile. Byc moze gdzies popelniam blad logiczny.

Nie. ?eby ci?g pasowa3, musi po dowolnym ci?gu (.*) miea znak niebed?cy
litera3em 'p' ([^p]), po którym nast?pi dowolny znak niebed?cy litera3em
'h' ([^h]), a potem znowu znak niebed?cy litera3em 'p' ([^p]), i ju?
mamy koniec ci?gu ($).
I dlatego nie bed? pasowaa wszelkie ci?gi, które ró?ni? sie w dowolnym z
tych miejsc. Czyli np. przedostatnim znakiem bedzie 'h' i reszta ci?gu
nie ma ju? znaczenia, bo i tak nie bedzie pasowaa.

Poszukaj o równowa?no?ci regekspów i automatów skonczonych. Mo?e to
podej?cie pomo?e Ci zrozumiea wyra?enia regularne.

>> Mam wra?enie, ?e regexp przyjmuj?cy wszystko za wyj?tkiem "php$" bedzie
>> ciut zawi3y, ale moge sie mylia.
>
>A tego sie obawiam - zwlaszcza przy mojej, jak widac, biednej znajomosci
>regexpow.

Po prostu regexp, który pozwoli na wszystko poza (.*php$) bedzie do?a
skomplikowany, poniewa? tradycyjnie u?ywane regexpy nie pozwalaj? na
u?ycie negacji, któr? trzeba zastepowaa kombinacj? innych operatorów.
Dla przyk3adu pozwole sobie ograniczya sie do bardziej zdegenerowanego
ni? Twój pomys3u, czyli szukania wszystkiego, co nie konczy sie na
(hp). Musimy zatem uwzglednia wszystkie ci?gi, które nie maj? 'h' na
pierwszym i 'p' na drugim miejscu, czyli (hp), ale te? te, które maj?
'h' na pierwszym, ale nie maj? 'p' na drugim, oraz te, które maj? 'p'
na drugim, ale nie maj? 'h' na pierwszym.
Zatem docelowy regexp odrzucaj?cy wszystko, co nie konczy sie na (hp)
mia3by postaa (.*(h[^p]|[^h]p|[^h][^p]))
Mo?esz sobie wyindukowaa postaa dla trzech lub wiecej koncowych znaków.

--
d'`'`'`'`'`'`'`'`'`'`'`'`'Yb C :The power of Asm w/the flexibility of Asm
`b Kruk@epsilon.eu.org d'
d' http://epsil... Yb
`b,-,.,-,.,-,.,-,.,-,.,-,.d'

Mariusz Kruk

4/16/2007 5:28:00 PM

0

epsilon$ while read LINE; do echo ">$LINE"; done < hubert depesz lubaczewski
>3. zak3adaj?c, ?e u?ywasz pcre albo pochodnych, mo?esz:
>(?<!\.php)$

O. W pcre jest negacja dla ca3ego ci?gu, a nie tylko pojedynczego
litera3u? Musia3em co? przespaa :-)

--
\------------------------/ Emacs to jest Bardzo G3upi Pomys3 bardzo
| Kruk@epsilon.eu.org | starannie wykonany (Makawity)
| http://epsil... |
/------------------------\

Jacek Rudowski

4/16/2007 5:59:00 PM

0

On 2007-04-16, Mariusz Kruk <Mariusz.Kruk@epsilon.eu.org> wrote:
> Nie. ?eby ci?g pasowa3, musi po dowolnym ci?gu (.*) miea znak niebed?cy
> litera3em 'p' ([^p]), po którym nast?pi dowolny znak niebed?cy litera3em
> 'h' ([^h]), a potem znowu znak niebed?cy litera3em 'p' ([^p]), i ju?
> mamy koniec ci?gu ($).
> I dlatego nie bed? pasowaa wszelkie ci?gi, które ró?ni? sie w dowolnym z
> tych miejsc. Czyli np. przedostatnim znakiem bedzie 'h' i reszta ci?gu
> nie ma ju? znaczenia, bo i tak nie bedzie pasowaa.

Tak, to ma sens i w sumie troche mi rozjasnilo.

> Zatem docelowy regexp odrzucaj?cy wszystko, co nie konczy sie na (hp)
> mia3by postaa (.*(h[^p]|[^h]p|[^h][^p]))
> Mo?esz sobie wyindukowaa postaa dla trzech lub wiecej koncowych znaków.

O matko, az sie boje :)

No nic, bede probowal dalej.
Dziekuje serdecznie za okazana pomoc.

Pozdrawiam
--
Jacek "AMI" Rudowski

Jacek Rudowski

4/16/2007 6:01:00 PM

0

On 2007-04-16, hubert depesz lubaczewski <depesz@depesz.com> wrote:
> On 2007-04-16, Jacek Rudowski <ami@_usunto_wkurw.org> wrote:
>> W sumie zagadnienie jest w pewnym sensie programistyczne, wiec probuje tutaj
>> szczescia.
>> Potrzebuje przy pomocy wyrazen regularnych wybrac tylko pliki, ktore
>> _nie_ sa plikami .php.
>
> 1. typów wyra?en regularnych jest kilka ró?nych. wzajemnie niekompatybilnych.

To mnie nie pocieszylo :)

> 2. tego co chcesz prosto sie ogólnie nie da.

Ani to ;)

> 3. zak3adaj?c, ?e u?ywasz pcre albo pochodnych, mo?esz:
> (?<!\.php)$

konkretnie to musze to zrobic w LocationMatch w httpd.conf.
Wiec jesli istnieje inna mozliwosc, to takze bylbym otwarty na propozycje, ale
to juz troche mniej ta grupa :)

Dziekuje i pozdrawiam
--
Jacek "AMI" Rudowski

hubert depesz lubaczewski

4/16/2007 6:30:00 PM

0

On 2007-04-16, Mariusz Kruk <Mariusz.Kruk@epsilon.eu.org> wrote:
> epsilon$ while read LINE; do echo ">$LINE"; done < hubert depesz lubaczewski
>>3. zak3adaj?c, ?e u?ywasz pcre albo pochodnych, mo?esz:
>>(?<!\.php)$
> O. W pcre jest negacja dla ca3ego ci?gu, a nie tylko pojedynczego
> litera3u? Musia3em co? przespaa :-)

zak3adam, ?e "p" w pcre zobowi?zuje.
z mana do perlre:
"(?<!pattern)"
A zero-width negative look-behind assertion. For example "/(?<!bar)foo/"
matches any occurrence of "foo" that does not follow "bar". Works only for
fixed-width look-behind.

depesz

--
quicksil1er: "postgres is excellent, but like any DB it requires a
highly paid DBA. here's my CV!" :)
http://www.d... - blog dla ciebie (i moje CV)

hubert depesz lubaczewski

4/16/2007 6:33:00 PM

0

On 2007-04-16, Jacek Rudowski <ami@_usunto_wkurw.org> wrote:
> konkretnie to musze to zrobic w LocationMatch w httpd.conf.
> Wiec jesli istnieje inna mozliwosc, to takze bylbym otwarty na propozycje, ale
> to juz troche mniej ta grupa :)

sprawd? - mo?e zadzia3a.
jak nie - to masz pecha. ogólnie regexpy nie daj? takich mo?liwo?ci.
zawsze mo?esz jednak zrobia co? innego:
<location> na wszystko z takimi cechami jak ma miea dla nie-php, i
oddzielny location dla .php

depesz

--
quicksil1er: "postgres is excellent, but like any DB it requires a
highly paid DBA. here's my CV!" :)
http://www.d... - blog dla ciebie (i moje CV)

Mariusz Kruk

4/16/2007 7:22:00 PM

0

epsilon$ while read LINE; do echo ">$LINE"; done < hubert depesz lubaczewski
>>>3. zak3adaj?c, ?e u?ywasz pcre albo pochodnych, mo?esz:
>>>(?<!\.php)$
>> O. W pcre jest negacja dla ca3ego ci?gu, a nie tylko pojedynczego
>> litera3u? Musia3em co? przespaa :-)
>zak3adam, ?e "p" w pcre zobowi?zuje.

Owszem. Zd??y3em ju? sam wygooglaa, ale dzieki za informacje :-)


--
Kruk@ -\ | Inwigilacja kosztuje. Permanentna inwigila-
}-> epsilon.eu.org | cja kosztuje du?o.(Bronek Kozicki)
http:// -/ |
|