尝试匹配一个单词,除非它包含在星号中。这是我所拥有的:
(?<!\*)\b(word)\b(?!\*)
问题是它不会匹配*word
或word*
不应该匹配,因为我希望它匹配除*word*
.
尝试匹配一个单词,除非它包含在星号中。这是我所拥有的:
(?<!\*)\b(word)\b(?!\*)
问题是它不会匹配*word
或word*
不应该匹配,因为我希望它匹配除*word*
.
试试这个解决方案,应该匹配任何单词,而不仅仅是“单词”:
(?<!\*)\b\w+\b|\b\w+\b(?!\*)
这里的关键是寻找可能出现星号的两种情况,即在单词的开头或结尾。
然后你需要一个交替。
(?<!\*)\bword\b|\bword\b(?!\*)
在 Regexr 上查看。
您的问题是,只要一个断言为真,整个正则表达式就会失败。我的方式你允许*
一侧,但它失败了,当*
在两侧时。
Some divertissement:
(?(?<=\*)word(?!\*)|word(?=\*))
Explanation:
(? # if
(?<=\*) # there is * before
word(?!\*) # then match word not followed by *
| # else
word(?=\*) # match word followed by *
) # end if