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