2014-05-20 33 views
0

我正在使用preg_replacepreg_match與PHP,在這個字符集中工作:西里爾語的Windows 1251. 我試圖匹配使用大小寫不敏感修飾符的單詞。PHP正則表達式不區分大小寫西里爾字符集

我做這些測試:

$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'; 

的正則表達式是functionnal在UTF-8,但不是在Windows 1251 請注意,我用了像 'х' 和 'Х' cyrillics字符測試(看起來像拉丁字母'x'和'X')。

我的問題是要知道這種行爲是否正常?

如何在Windows 1251字符集中將我的西里爾文單詞與不區分大小寫的修飾符進行匹配?

非常感謝。

回答

2

我不認爲PCRE支持的字符集,所以你的選擇是基本上

  • 所有內容轉換爲utf8,處理和再轉換回,或
  • 使用了不區分大小寫手工製作的正則表達式,如/[Дд][Ыы][Кк]/匹配ДыкдыК
+0

確實沒有。所以,你說得對,因爲這兩個變種看起來像是答案。 –

+0

好多謝謝你的回答。我選擇了第二個變體,因爲它太重,無法將整個頁面轉換爲utf-8並轉換回原始編碼。現在沒關係,因爲我有十個字來檢查。如果我有幾百個字來檢查,我會感到失望,在這種情況下,這種解決方案將不適合。 – KevinNTH

相關問題