Preg_match различия? - PullRequest
       14

Preg_match различия?

3 голосов
/ 22 апреля 2010

Я хочу спросить, в чем смысл или разница между этими двумя строками?

  1. if( preg_match_all('/\#([א-תÀ-ÿ一-龥а-яa-z0-9\-_]{1,50})/iu', $message, $matches, PREG_PATTERN_ORDER) ) {

  2. if( preg_match_all('/\#([а-яa-z0-9\-_\x{4e00}-\x{9fa5}]{1,50})/iu', $message, $matches, PREG_PATTERN_ORDER) ) {

а что означает число 3 в этой строке? (Стрелка указывает)

if( preg_match_all('/\@([a-zA-Z0-9\-_\x{4e00}-\x{9fa5}]{->3,30})/u', $message, $matches, PREG_PATTERN_ORDER) ) {

Спасибо!

Ответы [ 3 ]

3 голосов
/ 22 апреля 2010

Я отвечу на 2 часть вашего вопроса:

Значение {3,30} в регулярном выражении означает quantifier для min из 3 и макс. 30 repetitions.

  • a* означает ноль или более a
  • a+ означает один или несколько a
  • a? означает ноль или единицу a
  • a{1} означает ровно столько же, сколько просто a
  • a{1,} означает один или несколько таких же, как a+
  • a{1,3} означает минимум один и максимум 3 a's

вместо a может быть любое сложное регулярное выражение. Пример: [a-zA-Z]{3,30} будет означать, по крайней мере, 3 и максимум 30 любого из алфавитов.

0 голосов
/ 22 апреля 2010

Во втором выражении используется синтаксис Unicode для сопоставления символов Unicode.

\ x {FFFF} где FFFF - от 1 до 4 шестнадцатеричных цифр
Синтаксис Perl для соответствия определенной кодовой точке Unicode. Может использоваться внутри классов персонажей.

Пример:
\ x {E0} соответствует à, закодированному только как U + 00E0.
\ x {A9} соответствует ©

Таким образом он пытается сопоставить каждый символ Unicode от U + 4e00 до U + 9fa5 (от & # x4e00; до & # x9fa5; ), тогда как последний не является допустимым символом Юникода.


Первые выражения также пытаются сопоставить эти символы (一-龥), но они не выражены в синтаксисе Unicode (независимо от того, противоречит ли это проблеме, которую я не знаю). Кроме того (как уже упоминалось) первое выражение соответствует большему количеству символов, а именно א-ת и À-ÿ.


На второй вопрос уже очень хорошо ответил от unicornaddict.

0 голосов
/ 22 апреля 2010

Ваше первое регулярное выражение включает иврит и латинские символы с акцентом (и, возможно, другие), которые не включены во второе регулярное выражение.

...