Есть ли утилита, которая преобразует POSIX в PCRE для PHP?[дубликат]
Вопрос
На этот вопрос уже есть ответ здесь:
Есть ли утилита, которая преобразует POSIX в PCRE для PHP?Меня несколько смущает руководство по PHP для PCRE, и хотя я попытаюсь найти больше информации о PCRE, мне было интересно, разработал ли кто-нибудь такую утилиту.
Или, если кто-нибудь объяснит, как преобразовать следующее, это тоже было бы прекрасно:
ereg("^#[01-9A-F]{6}$", $sColor)
Но, пожалуйста, объясните, как это делается, а не просто расскажите мне о преобразовании.
Решение
preg_match("/^#[01-9A-F]{6}$/", $sColor)
In this case you only need to add the two delimiters.
В perl вы можете написать что-то вроде
if ( s =~ /x.+y/ )
{ print "match"; }
As you can see the actual regular expression is encapsulated in //. If you want to set an option on the regular expression you put it after the second /, e.g. switching the expression to ungreedy by default /x.+y/U
pcre now emulates this behaviour. Though you have to call a function you also have to provide the delimiters and set the options after the second delimiter. In perl the delimiter has to be /, with pcre you can chose more freely
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 лучше всего выбрать символ, который не отображается в выражении.
Другие советы
preg_match("/^#[01-9A-F]{6}$/D", $sColor)
Обратите внимание на D
модификатор.Люди все время забывают об этом.Без этого $
позволит ввести окончательный символ новой строки.Будет передана строка типа "#000000
".Это тонкое различие между POSIX и PCRE.
И, конечно же, [01-9]
может быть переписан на [0-9]
.
Кстати, PHP поддерживает как регулярные выражения PCRE, так и POSIX.Вот раздел руководства по PHP, посвященный регулярным выражениям POSIX, поэтому вам не нужно их преобразовывать: http://www.php.net/manual/en/book.regex.php