Есть ли утилита, которая преобразует POSIX в PCRE для PHP?[дубликат]

StackOverflow https://stackoverflow.com/questions/1023227

Вопрос

На этот вопрос уже есть ответ здесь:

Есть ли утилита, которая преобразует 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top