正则表达式和重音/波浪符号

3

如何在正则表达式中包含重音符号?我想要检测从a-zäáàëéèíìöóòúùñç这些字母,但是这个正则表达式不起作用:

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

你正在使用哪种编程语言?你能展示一个你正在测试的字符串例子吗? - jorgehmv
我的示例字符串可能是“ésta”,我正在处理西班牙语。这个正则表达式无法检测到“é”。 - jprog
抱歉,我是指什么编程语言。我不知道为什么末尾有个“i”,这是你们编程语言的特定要求吗? - jorgehmv
抱歉,我在标题中包含了它,但我没有意识到它已被编辑... 我正在使用PHP,而我不知道那个“i”是什么意思。 - jprog
5个回答

3
您可以尝试使用预定义类来匹配所有字母,例如:

[\p{L}]

这在大多数正则表达式引擎中都可以使用。

你可以在这里阅读更多关于正则表达式中的Unicode的内容,例如:http://www.regular-expressions.info/unicode.html


那么如何使用呢?我的意思是,$pattern = '/^([\p{L}])/'; 不能解决我的问题... - jprog

3
如何看待以下问题:
cat test.php
<?php
preg_match('/\pL/u', 'é', $m);
print_r($m);
?>


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

好的,这在你的例子中是有效的,那么,在之前的问题中,我用这段代码做错了什么呢?:https://dev59.com/dWXWa4cB1Zd3GeqPKjNG 我写的是 $pattern = '/\pL/u'; - jprog

1

你可以尝试在正则表达式中添加u标志(请参见modifiers页面上的PCRE_UTF8


0
如果你刪掉最後的'i'會怎麼樣呢? 我正在使用Rubular來測試它,在沒有'i'(也沒有/,因為這些是php特定的)的情況下可以運行。所以基本上在這個頁面上進行如下測試:^([a-zäáàëéèíìöóòúùñç])

Rubular提供了斜杠(/),但你应该使用i修饰符;它使匹配不区分大小写,在Ruby和PHP中都是如此。PHP正则表达式缺少的是u修饰符,它会将正则表达式和源字符串视为UTF-8处理。 - Alan Moore

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接