匹配[A](B)但不匹配![A](B)

时间:2011-11-02 20:05:48

标签: regex

我无法让它发挥作用 我正在尝试匹配[A](B)中的A和B,但如果它不是以!开头,它应该只进行匹配。

到目前为止我已经这样了。 /\[([^\]]+)]\(([^)]+)\)/

它匹配A和B,但是如果我添加[^\!]它就不匹配任何东西。

/[^\!]\[([^\]]+)]\(([^)]+)\)/

![A](B)可以是更大字符串中的任何位置。

为什么这不起作用?

4 个答案:

答案 0 :(得分:1)

如果正在使用的正则表达式支持lookbehind's,则以下内容应该可以正常工作

(?<!!)\[A\]\(B\)

第一组意味着没有!后面

答案 1 :(得分:1)

试试这个:([^!]|^)(\[A\]\(B\))

答案 2 :(得分:1)

这对我来说适用于TextPad(目前我只有正则表达式。你可能需要修改转义):

\(^\|[^\!]\)\[[^]]+\]([^)]+)

\(^\|[^\!]\)匹配行的开头或!以外的字符。

答案 3 :(得分:0)

由于您不能使用后视断言,因此您可以使用两个具有逻辑连接的不同正则表达式:

/\[([^\]]+)]\(([^)]+)\)/ && !(/!\[([^\]]+)]\(([^)]+)\)/)