嵌套"一切除了"在正则表达式

时间:2016-02-22 18:20:43

标签: regex nested

我正在编写一个程序,将伪正则表达式转换为真正的正则表达式并遇到了问题。在伪正则表达式中有一个命令,这意味着"除了"之外的所有内容。并且只使用1个字符。所以例如!a 表示除了a之外的所有内容。但是也允许这样做:!(a | b | c)(除了a,b和c之外的所有内容)。转换为真正的正则表达式,它分别是 [^ a] [^(a | b | c)] 。 然后,如果我有这样的伪正则表达式:!(a |!b | c)(或者只是字母b ......我认为)那么它将被转换为如下所示: EM> [^(A | [^ b] | C)] 。问题是这实际上不是一个有效的正则表达式(至少根据regex101.com),因为显然嵌套[^]不起作用。有没有其他方法可以将其转换为有效的正则表达式? 提前致谢!

1 个答案:

答案 0 :(得分:0)

问题是,方括号中的^实际上意味着“不是那些字符”,但在其他任何地方,^表示字符串的开头。如果你有regexp“^ abc”,它只会在字符串以“abc”开头,但“dabc”不匹配时匹配。

您正在寻找的是负面预测符号?!,就像这样:

(?!a|[^b]|c)

您可以在此处找到更多相关信息: http://www.regular-expressions.info/lookaround.html

我还建议使用https://www.debuggex.com/来表示正则表达式,它确实有助于找到错误。