2011-11-11 29 views
3

我需要一個正則表達式來計算字符串中需要2個按鍵來創建字符的字符。我開始很簡單,只是計算大寫字符:Preg_match用於計算大寫字母和旋轉字符

preg_match_all('/[A-Z]/', $string, $matches); 

現在,我也想找到circumflexed字符:A E I Uô

只需在正則表達式添加這些似乎不工作,至少我收到一些奇怪的結果:

$string = 'Têst'; 
echo preg_match_all('/[A-Z]/', $string, $matches); 

會回顯「1」,這很好。

$string = 'Têst'; 
echo preg_match_all('/[A-Zê]/', $string, $treffer); 

會回顯「3」,這很奇怪。

+2

你有沒有試圖只搜索迴旋字符?他們可能會以兩個字符輸入比賽(代表兩個擊鍵,因此每個字符會計數兩次)。除非有一些神祕的unicode模式將它們解釋爲單個字符,否則可以運行兩個正則表達式,一個用於Caps,另一個用於迴旋字符,然後在添加之前將劃掉的字符數除以2。這似乎很明顯,但我無法知道你的其他要求是什麼,更不用說你的經驗水平...... –

回答

2

您必須使用u modifier,否則「E」被認爲具有2個字符(2字節):

$string = 'Têst'; 
echo preg_match_all('/[A-Zê]/u', $string, $treffer); // 2 

Demo @IDEOne.com

+0

完美,也感謝你讓我知道IDEOne.com –

0

當我匹配'/[A-Zê]/''Têst',我得到了2個結果。 (這是你所期望的)。我的源代碼使用字符集UTF-8編碼,也許不同的字符集可能是您獲得不同結果的原因。此外,您可以通過print_r($matches);更好地瞭解正在匹配的內容。

這個例子對我工作的罰款:(IDE:NetBeans中,平臺:窗戶,PHP版本:5.3.4)

<?php 
$string = 'Täst'; 
echo preg_match_all('/[A-Zâêîûôäëïöü]/', $string, $matches); 
print_r($matches); 

有趣的是,ideone也給你3個結果第一次測試,和我不不知道爲什麼。此外,它是相當困難的調試,因爲ideone不輸出的var_dump或正確的print_r出於某種原因... http://ideone.com/qqQyA

相關問題