4

尝试匹配一个单词,除非它包含在星号中。这是我所拥有的:

(?<!\*)\b(word)\b(?!\*)

问题是它不会匹配*wordword*不应该匹配,因为我希望它匹配除*word*.

4

3 回答 3

3

试试这个解决方案,应该匹配任何单词,而不仅仅是“单词”:

(?<!\*)\b\w+\b|\b\w+\b(?!\*)

这里的关键是寻找可能出现星号的两种情况,即在单词的开头结尾。

于 2013-06-18T08:51:43.207 回答
2

然后你需要一个交替。

(?<!\*)\bword\b|\bword\b(?!\*)

在 Regexr 上查看。

您的问题是,只要一个断言为真,整个正则表达式就会失败。我的方式你允许*一侧,但它失败了,当*在两侧时。

于 2013-06-18T08:49:25.270 回答
1

Some divertissement:
(?(?<=\*)word(?!\*)|word(?=\*))

Explanation:

(?                      # if
    (?<=\*)             # there is * before 
        word(?!\*)      # then match word not followed by *
        |               # else
        word(?=\*)      # match word followed by *
)                       # end if

Online demo

于 2013-06-18T09:00:30.003 回答