尝试匹配一个单词,除非它包含在星号中。这是我所拥有的:
(?<!\*)\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