RegEx用于单词边界但仍然匹配if前面或后面是特殊字符

时间:2016-02-18 11:07:30

标签: regex

我想要完成的是匹配任何单词,即使它们被跟随或前面跟着非字母数字字符。

例如,对于以下字符串This string contains word1 and word2* and anotherword1,我希望获得word1word2的两个匹配,但不是anotherword1word1 anotherword1

我现在所拥有的是

\b(word1|word2)\b

但这与word2不匹配(忽略*)。

从我读到的\b只能在字母数字字符和非字母数字字符之间进行匹配,但我不知道如何处理跟踪我的目标字词的特殊字符。

LE:我认为(?i)(?<=^|[^a-zA-Z0-9])(word1|word2)(?=$|[^a-zA-Z0-9])可以解决这个问题......但它看起来不错吗?这是一种更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

您正在寻找

(?<!\w)(word1|word2)(?!\w)

(?<!\w)(?!\w)外观是明确的前导((?<!\w))和尾随((?!\w))字边界。

\b构造含义取决于上下文:\bw将匹配w中的*w,因为它需要\b之前的非单词字符,但\b\**之前需要一个单词字符,因为*是一个非单词字符。

在不支持lookbehinds的语言中,(?<!\w)应替换为(^|\W),并且应在代码中进行进一步的操作。