2012-06-20 159 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