2009-06-21 4 views
6

Есть ли утилита, которая будет конвертировать POSIX в PCRE для PHP? Меня несколько смущает руководство PHP по PCRE, и, хотя я попытаюсь найти дополнительную информацию о PCRE, мне было интересно, спроектировал ли кто-нибудь такую ​​утилиту.Есть ли утилита, которая будет конвертировать POSIX в PCRE для PHP?

Или, если кто-то может объяснить, как преобразовать следующее, что также будет хорошо:

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

Но, пожалуйста, объясните, как это делается, а не просто сказать мне преобразование.

+1

интересно вы пишите 01-9, почему не 0-9? – VolkerK

ответ

6

preg_match("/^#[01-9A-F]{6}$/", $sColor)
В этом случае вам нужно только добавить два разделителя.

В perl вы можете написать что-то вроде

if (s =~ /x.+y/) { print "match"; }
Как вы можете видеть, фактическое регулярное выражение инкапсулировано в //. Если вы хотите установить параметр в регулярном выражении, вы помещаете его после второго /, например. переключение выражения на ungreedy по умолчанию /x.+y/U
Теперь pcre эмулирует это поведение. Хотя вам нужно вызвать функцию, вам также необходимо предоставить разделители и задать параметры после второго разделителя. В perl разделитель должен быть /, с помощью pcre вы можете выбрать более свободно
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)
все равно для pcre, лучше всего выбрать символ, который не появляется в выражении.

-1

Кстати, PHP поддерживает как регулярные выражения PCRE, так и POSIX. Вот раздел руководства PHP по регулярным выражениям POSIX, поэтому вам не нужно их преобразовывать: http://www.php.net/manual/en/book.regex.php

+2

Я знаю об этом. Тем не менее, POSIX будет устаревшим в PHP 5.3, поэтому я хотел просто держать все в курсе событий. – waiwai933

+0

Этот ответ устарел, не могли бы вы его обновить? 'ereg()' устарел сейчас – HamZa

4

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

Обратите внимание на D modifier. Люди все время забывают об этом. Без него $ разрешит окончательный символ новой строки. Пройдет строка типа «# 000000 \ n». Это тонкая разница между POSIX и PCRE.

И, конечно, [01-9] может быть переписан на [0-9].

 Смежные вопросы

  • Нет связанных вопросов^_^