3

我有这个正则表达式:

(\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à

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

4

2 回答 2

2

单词边界\b仅适用于\w字符类中的字符,即[0-9a-zA-Z_],因此您不能\b在重音字符(如à.

您可以使用前瞻解决您的问题:

felicità(?=\s|$)

或更短:

felicità(?!\S)

(或\W代替\s建议的@Sniffer,但你冒着风险匹配类似的东西felicitàà:)

于 2013-10-17T13:04:11.050 回答
1

尝试以下替代方法:

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

这将匹配您列出的任何单词,只要这些单词中的任何一个后跟非单词字符\W或 end-of-string $

正则表达式 101 演示

于 2013-10-17T13:03:33.433 回答