php preg_match - 特别是西里尔字母

时间:2014-12-18 08:29:57

标签: php regex preg-match

我们有:

preg_match('/^([А|В|Е|К|М|Н|О|Р|С|Т|У|Х].)(?:[\d]{3})(?:[АВЕКМНОРСТУХ].){2}(?:[\d]{2,3})$/', 'Ф123АХ123');

reg exp,但它不能用1-st输入和第二次非贪婪。

我也尝试过UTF-8十六进制代码,但它没有用,:

preg_match('/^([x\{0445}x\{0446}].)(?:[\d]{3})(?:[x\{0445}x\{0446}].){2}(?:[\d]{2,3})$/u', 'Х123ЦЦ123');

请记住它是西里尔字母 - 魔法俄罗斯字符=)

任何帮助,特别是具体的帮助 - 将不胜感激。

1 个答案:

答案 0 :(得分:1)

这似乎可以满足您的需求:

/^([АВЕКМНОРСТУХ])(\d{3})([АВЕКМНОРСТУХ]{2})(\d{2,3})$/u

示例:

preg_match('/^([АВЕКМНОРСТУХ])(\d{3})([АВЕКМНОРСТУХ]{2})(\d{2,3})$/u', 'Ф123АХ123', $m);
print_r($m); // nothing, because Ф doesn't match

preg_match('/^([АВЕКМНОРСТУХ])(\d{3})([АВЕКМНОРСТУХ]{2})(\d{2,3})$/u', 'У123АХ123', $m);
print_r($m); // matches

作为一般建议,当使用非拉丁输入的pcre时,请确保

  • 您的输入是utf8编码
  • 您的来源是utf8编码
  • 您正在使用正则表达式中的“u”标记