2012-06-20 153 views
3

我應該如何在正則表達式中包含重音符號?我想從a-zäáàëéèíìöóòúùñç檢測字母,但這個表達式不起作用:正則表達式和重音符號

$pattern = '/^([a-zäáàëéèíìöóòúùñç])/i'; 
+0

你正在學什麼語言?你可以顯示你正在測試的例子字符串 – jorgehmv

+0

我的例子字符串可能是'ésta',我正在西班牙語..這正則表達式不檢測'é' – jprog

+0

對不起,我的意思是什麼編程語言..我不知道爲什麼'我'在最後,是你的編程語言特定的東西嗎? – jorgehmv

回答

1

你可以嘗試將u標誌添加到您的正則表達式(見PCRE_UTF8modifiers頁)

2

您可以嘗試使用預定義的類來匹配所有字母,例如:

[\p{L}] 

這將適用於大多數正則表達式引擎。

你可以閱讀更多關於正則表達式的Unicode這裏,例如:http://www.regular-expressions.info/unicode.html

+0

這又是怎麼用的?我的意思是,$ pattern ='/ ^([\ p {L}])/';沒有解決我的問題... – jprog

0

如果你刪除最後一個「我」,我使用Rubular來測試它和它的作品沒有它(並沒有/因爲這些是PHP專用)

所以基本上測試它在這個頁面是這樣的:^([a-zäáàëéèíìöóòúùñç])

+0

謝謝,但它不起作用... – jprog

+0

Rubular提供斜線('/'),但你應該使用'i'修飾符;它使得匹配不區分大小寫,在Ruby中與在PHP中一樣。 PHP正則表達式缺少的是'u'修飾符,它使正則表達式和源字符串被視爲UTF-8。 –

3

如何:

cat test.php 
<?php 
preg_match('/\pL/u', 'é', $m); 
print_r($m); 
?> 


php -q test.php 
Array 
(
    [0] => é 
) 
+0

Okei,這在你的例子中有效,那麼,我在做這個前一個問題的代碼有什麼問題嗎?:http://stackoverflow.com/questions/11122274/capitalize-first-letter-of-a-string-preceded -with-special-characters-php 其中我寫$ pattern ='/ \ pL/u'; – jprog

+0

@jpris:在這裏看到我的答案:http://stackoverflow.com/a/11135251/372239 – Toto