0

我正在使用 Java 的匹配器使用以下正则表达式对字符串中的术语进行分组:

Pattern.compile("(\\\\\"[^\\\\\"]*\\\\\"|[^\\s\\\\\"]+)");

这是我遇到问题的部分:[^\s\\\"]

我希望它只匹配非空格和悬空转义引号,例如 \"。有没有办法在字符类中对 \\ 和 \" 进行分组,以便它们只匹配在一起?

我尝试使用lookahead/lookbehind,但发现将它包含在字符类中让我回到了第一格。

4

1 回答 1

2

字符类匹配单个字符。如果我理解正确,您只想匹配 string \"。为此,您根本不需要字符类——正则表达式\\"已经匹配了!(在 Java 字符串中,这看起来\\\\\"很荒谬,但你已经知道了。)

您可以使用括号将事物组合在一起:(\\\\\"). 您也可以在这样的组内交替使用|. 因此,要匹配非空格 \",您可以这样做:(\S|\\\\\"). (注意\S与 相同[^\s]。)

编辑:我没有给予足够的关注。您可以匹配除\"空格以外的所有内容,如下所示:(\\\\(?!")|[^\s\\]),我认为。

这个怎么样:([^\\s\\\\]|\\\\(?!"))。这应该匹配除空格之外的任何内容\ a\后不跟 a "

于 2012-05-30T23:20:29.207 回答