我想要完成的是匹配任何单词,即使它们被跟随或前面跟着非字母数字字符。
例如,对于以下字符串This string contains word1 and word2* and anotherword1
,我希望获得word1
和word2
的两个匹配,但不是anotherword1
和word1
anotherword1
。
我现在所拥有的是
\b(word1|word2)\b
但这与word2
不匹配(忽略*)。
从我读到的\b
只能在字母数字字符和非字母数字字符之间进行匹配,但我不知道如何处理跟踪我的目标字词的特殊字符。
LE:我认为(?i)(?<=^|[^a-zA-Z0-9])(word1|word2)(?=$|[^a-zA-Z0-9])
可以解决这个问题......但它看起来不错吗?这是一种更简单的方法吗?
答案 0 :(得分:1)
您正在寻找
(?<!\w)(word1|word2)(?!\w)
(?<!\w)
和(?!\w)
外观是明确的前导((?<!\w)
)和尾随((?!\w)
)字边界。
\b
构造含义取决于上下文:\bw
将匹配w
中的*w
,因为它需要\b
之前的非单词字符,但\b\*
在*
之前需要一个单词字符,因为*
是一个非单词字符。
在不支持lookbehinds的语言中,(?<!\w)
应替换为(^|\W)
,并且应在代码中进行进一步的操作。