строка preg_match - PullRequest
       4

строка preg_match

1 голос
/ 10 октября 2011

Может кто-нибудь объяснить мне значение этого паттерна.

preg_match(/'^(d{1,2}([a-z]+))(?:s*)S (?=200[0-9])/','21st March 2006','$matches);

Так поправьте меня, если я ошибаюсь:

    ^        = beginning of the line   
    d{1,2}   = digit with minimum 1 and maximum 2 digits  
    ([a-z]+) = one or more letters from a-z
    (?:s*)S  = no idea...  
    (?=      = no idea...
    200[0-9] = a number, starting with 200 and ending with a number (0-9)

Может кто-то завершить этосписок

Ответы [ 2 ]

2 голосов
/ 10 октября 2011

Вот хорошая диаграмма strfriend :

^(d{1,2}([a-z]+))(?:s*)S (?=200[0-9])

Но я думаю, что вы, вероятно, имели в виду ^(\d{1,2}([a-z]+))(?:\s*)\S (?=200[0-9]) с обратными слешами, что дает эту диаграмму :

^(\d{1,2}([a-z]+))(?:\s*)\S (?=200[0-9])

То есть, это регулярное выражение соответствует началу строки, за которой следуют одна или две цифры, одна или несколько строчных букв, ноль или несколько пробельных символов, один непробельный символ и пробел. Кроме того, все это должно сопровождаться числом между 2000 и 2009 годами, хотя это число на самом деле не совпадает с регулярным выражением & mdash; это всего лишь прогнозное утверждение. Кроме того, первые цифры и буквы вводятся в $matches[1], а только буквы в $matches[2].

Для получения дополнительной информации о синтаксисе регулярных выражений PHP PCRE см. http://php.net/manual/en/pcre.pattern.php

2 голосов
/ 10 октября 2011

Regular-exressions.info - очень полезный ресурс.

/'^(d{1,2}([a-z]+))(?:s*)S (?=200[0-9])/

(?:regex) - не захватывающие скобки; Они не очень полезны в вашем примере, но могут быть использованы для выражения таких вещей, как (?:bar)+, что означает 1 или более bar s

(?=regex) смотрит вперед положительно, но соответствует позиции, а не содержимому. Таким образом, (?=200[0-9]) в вашем примере делает совпадения с регулярным выражением только датами предыдущего десятилетия, без , соответствующего самому году.

...