假设我有一个字符串:
"ABC+DF" + someVar + exp(A+B)
我想在一些 var 前后匹配 + 符号,而不是在双引号或 exp() 内匹配。
有没有一种正则表达式方法只匹配不在引号或 exp() 中的 + 符号?
更新:
您可以假设 exp() 中的所有内容都应该被忽略。也许这是另一种思考方式。引号或 exp() 之间的任何内容都应从正则表达式中忽略。
正则表达式将用于 java String::split 方法。我不确定那将是哪个平台。
您可以在 Java 中将其与replaceAll + split操作一起使用:
jshell> String s = "\"ABC+DF\" + someVar + exp(A+B)";
s ==> "\"ABC+DF\" + someVar + exp(A+B)"
jshell> s.replaceAll("(\"[^\"]*\"|exp\\h*\\([^)]*\\))|\\h*\\+\\h*", "$1\0").split("\0+");
$15 ==> String[3] { "\"ABC+DF\"", "someVar", "exp(A+B)" }
replaceAll匹配并捕获我们要在交替左侧的组 #1 中忽略的部分。$1\0然后它将 match 替换\0为 NUL 字节(ASCII:0)。split仅用于拆分一个或多个 NUL 字节,即\0.