В чем разница между этими двумя регулярными выражениями? (используя php preg_match())
/^[0-9\x{06F0}-\x{06F9}]{1,}$/u
/^[0-9\x{06F0}-\x{06F9}\x]{1,}$/u
Что означают последние \x
во втором шаблоне?
В чем разница между этими двумя регулярными выражениями? (используя php preg_match())
/^[0-9\x{06F0}-\x{06F9}]{1,}$/u
/^[0-9\x{06F0}-\x{06F9}\x]{1,}$/u
Что означают последние \x
во втором шаблоне?
Он интерпретируется как \x00
(нулевой символ), но почти наверняка это ошибка, вызванная неаккуратным редактированием или копированием и вставкой.
http://www.regular-expressions.info/unicode.html
... Поскольку \x сам по себе не является допустимым токеном регулярного выражения...
Я думаю, что второй образец недействителен.
Согласно этой странице http://www.regular-expressions.info/unicode.html , \x полезен только после номера юникода:
Поскольку \x сам по себе не является допустимым токеном регулярного выражения, \x{1234} никогда нельзя спутать с совпадением \x 1234 раза.
Это странно. Обозначение Php для символа Юникода — \x{}. В перле то же самое.
Но у php есть модификатор //u в регулярных выражениях. Я предполагаю, что это означает юникод. В perl такого модификатора нет.
В регулярном выражении perl анализируется \x##, где ## требуется для обозначения символа ascii. Если это \x или \x#, предупреждение о недопустимой шестнадцатеричной цифре игнорируется (поскольку требуется 2 цифры, не больше и не меньше) и принимает только допустимые шестнадцатеричные цифры в последовательности. Если у вас нет цифр, как в \x, он использует \0 ascii char и т.д..
Однако любое обозначение \x{} допустимо, а \x{0} эквивалентно \x{}. И \x{0}-\x{ff} считается ascii, \x{100}- считается юникодом.
Таким образом, \x является допустимой escape-последовательностью hex/unicode, но сама по себе является предполагаемой шестнадцатеричной и является неполной, и, вероятно, это не то, что следует оставлять для механизмов синтаксического анализа по умолчанию.
Насколько я могу судить, второй \x
на самом деле является недопустимым символом. Оба выражения работают?