正则表达式 - 否定一个类中的一个组

时间:2012-05-30 23:15:07

标签: java regex

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

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

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

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

我尝试使用lookahead / lookbehind,但发现将它包含在角色类中会让我回到原点。

1 个答案:

答案 0 :(得分:2)

字符类匹配单个字符。如果我理解正确,您只想匹配字符串\"。要做到这一点,你根本不需要一个角色类 - 正则表达式\\"已经匹配了! (在Java字符串中,它看起来像\\\\\"这很荒谬,但是你有它。)

您可以使用括号将事物分组:(\\\\\")。您还可以使用|在此类组内进行切换。因此,为了匹配非空格 \",您可以执行此操作:(\S|\\\\\")。 (请注意,\S[^\s]相同。)

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

这个怎么样:([^\\s\\\\]|\\\\(?!"))。除了空格或\ \后面没有"时,这应匹配任何内容。