2009-06-21 4 views
6

Czy istnieje narzędzie, które przekonwertuje POSIX na PCRE dla PHP? Jestem nieco zdezorientowany przez podręcznik PHP na PCRE, a podczas gdy spróbuję znaleźć więcej informacji na temat PCRE, zastanawiałem się, czy ktoś zaprojektował takie narzędzie.Czy jest narzędzie, które przekonwertuje POSIX na PCRE dla PHP?

Albo, jeśli ktoś wyjaśnić jak przekonwertować następujące, że byłoby również w porządku:

ereg("^#[01-9A-F]{6}$", $sColor) 

Ale proszę wyjaśnić, jak to się robi, a nie po prostu powiedz mi konwersję.

+1

Interesujące jest, że piszesz 01-9, czemu nie 0-9? – VolkerK

Odpowiedz

6

preg_match("/^#[01-9A-F]{6}$/", $sColor)
W tym przypadku wystarczy tylko dodać dwa ograniczniki.

W języku Perl można napisać coś w rodzaju

if (s =~ /x.+y/) { print "match"; }
Jak widać rzeczywiste wyrażenie regularne jest enkapsulowane w //. Jeśli chcesz ustawić opcję w wyrażeniu regularnym, umieść ją po drugim /, np. domyślnie przełączanie wyrażenia na nieuporządkowane /x.+y/U
pcre teraz emuluje to zachowanie. Chociaż musisz wywołać funkcję, musisz podać ograniczniki i ustawić opcje po drugim ograniczniku. W perlu ogranicznik musi być /, z pcre możesz wybrać bardziej swobodnie
preg_match("/^#[01-9A-F]{6}$/", $sColor) 
preg_match("!^#[01-9A-F]{6}$!", $sColor) 
preg_match("#^\#[01-9A-F]{6}$#", $sColor) // need to escape the # within the expression here 
preg_match("^#[01-9A-F]{6}$", $sColor)
tak samo, aby PCre, najlepiej wybrać postać, która nie pojawia się w wyrażeniu.

-1

Nawiasem mówiąc, PHP obsługuje zarówno wyrażenia regularne PCRE, jak i POSIX. Oto sekcja podręcznika PHP na temat wyrażeń regularnych POSIX, więc nie trzeba ich konwertować: http://www.php.net/manual/en/book.regex.php

+2

Jestem tego świadomy. Jednak POSIX będzie przestarzały w PHP 5.3, więc starałem się zachować wszystko na czasie. – waiwai933

+0

Ta odpowiedź jest nieaktualna, czy możesz ją zaktualizować? 'ereg()' jest teraz przestarzałe – HamZa

4

preg_match("/^#[01-9A-F]{6}$/D", $sColor)

Zanotuj D modifier. Ludzie ciągle o tym zapominają. Bez niego $ pozwoli na ostateczny znak nowej linii. Łańcuch typu "# 000000 \ n" przeszedłby pomyślnie. Jest to subtelna różnica między POSIX i PCRE.

I, oczywiście, [01-9] można przepisać na [0-9].