我正在使用 Java 的匹配器使用以下正则表达式对字符串中的术语进行分组:
Pattern.compile("(\\\\\"[^\\\\\"]*\\\\\"|[^\\s\\\\\"]+)");
这是我遇到问题的部分:[^\s\\\"]
我希望它只匹配非空格和悬空转义引号,例如 \"。有没有办法在字符类中对 \\ 和 \" 进行分组,以便它们只匹配在一起?
我尝试使用lookahead/lookbehind,但发现将它包含在字符类中让我回到了第一格。
字符类匹配单个字符。如果我理解正确,您只想匹配 string \"
。为此,您根本不需要字符类——正则表达式\\"
已经匹配了!(在 Java 字符串中,这看起来\\\\\"
很荒谬,但你已经知道了。)
您可以使用括号将事物组合在一起:(\\\\\")
. 您也可以在这样的组内交替使用|
. 因此,要匹配非空格或 \"
,您可以这样做:(\S|\\\\\")
. (注意\S
与 相同[^\s]
。)
编辑:我没有给予足够的关注。您可以匹配除\"
空格以外的所有内容,如下所示:(\\\\(?!")|[^\s\\])
,我认为。
这个怎么样:([^\\s\\\\]|\\\\(?!"))
。这应该匹配除空格之外的任何内容\
或a\
后不跟 a "
。