重音字符和正则表达式

Accented characters and regular expression

本文关键字:正则表达式 字符      更新时间:2023-09-26

我有这个正则表达式:

('b)(emozioni|gioia|felicità)('b)

在如下所示的字符串中:

emozioni emozioniamo felicità felicitàs

它应该与第一个和第三个单词匹配。相反,它匹配第一个和最后一个。我认为这是因为重音字符。我尝试了这个替代方案:

('b)(emozioni|gioia|felicità's)('b)

但只有当它后面有另一个词时,它才匹配"felicità"。因此,只有在这种背景下才具体:

emozioni emozioniamo felicità felicitàs

而不是在另一个:

emozioni emozioniamo felicitàs felicità

在这里找到了一篇关于法语重音字符的文章(所以在单词的开头),我遵循了第二个答案。如果有人知道更好的解决方案,我们非常欢迎。

单词边界'b仅适用于'w字符类中的字符,即[0-9a-zA-Z_],因此您不能在像à这样的重音字符之后放置'b

您可以使用前瞻来解决您的案例中的问题:

felicità(?='s|$)

或更短:

felicità(?!'S)

(或'W按照@Sniffer建议代替's,但您冒着风险匹配以下内容:felicitàà

尝试以下替代方法:

'b(emozioni|gioia|felicità)(?='W|$)

这将匹配您列出的任何单词,只要这些单词中的任何一个后跟非单词字符'W或字符串结尾$

正则表达式 101 演示