【发布时间】:2014-05-20 15:22:44
【问题描述】:
我在 PHP 中使用 preg_replace 和 preg_match,在这个字符集中工作:Cyrillic Windows 1251。
我正在尝试使用不区分大小写的修饰符来匹配单词。
我做了这些测试:
$pattern = '/myCyrillicWord1|myCyrillicWord2/i';
$subject = 'Am I able to find MYCyrILlicWord1?';
$res = preg_replace($pattern, 'matched', $subject);
在 UTF-8 上:
在模式中使用 utf-8 修饰符:
$pattern = '/myCyrillicWord1|myCyrillicWord2/iu';
$output = 'Am I able to find matched or not';
没有:
$pattern = '/myCyrillicWord1|myCyrillicWord2/i';
$output = 'Am I able to find MYCyrILlicWord1 or not';
在 Windows 1251 上:
$pattern = '/myCyrillicWord1|myCyrillicWord2/i';
$output = 'Am I able to find MYCyrILlicWord1 or not';
正则表达式在 utf-8 上有效,但在 Windows 1251 上无效。 请注意,我使用西里尔字母“х”和“Х”(看起来像拉丁字母“x”和“X”)进行了测试。
我的问题是知道这种行为是否正常?
如何将 Windows 1251 字符集中的西里尔字母与不区分大小写的修饰符匹配?
非常感谢。
【问题讨论】:
标签: php regex character-encoding case-insensitive cyrillic