我正在使用Java的匹配器使用以下正则表达式对字符串中的术语进行分组:
Pattern.compile("(\\\\\"[^\\\\\"]*\\\\\"|[^\\s\\\\\"]+)");
这是我遇到问题的部分:[^ \ s \\\“]
我希望它只匹配非空格和悬空的转义引号,例如\“。有没有办法在字符类中对\\和\”进行分组,这样它们只能匹配在一起?
我尝试使用lookahead / lookbehind,但发现将它包含在角色类中会让我回到原点。
答案 0 :(得分:2)
字符类匹配单个字符。如果我理解正确,您只想匹配字符串\"
。要做到这一点,你根本不需要一个角色类 - 正则表达式\\"
已经匹配了! (在Java字符串中,它看起来像\\\\\"
这很荒谬,但是你有它。)
您可以使用括号将事物分组:(\\\\\")
。您还可以使用|
在此类组内进行切换。因此,为了匹配非空格或 \"
,您可以执行此操作:(\S|\\\\\")
。 (请注意,\S
与[^\s]
相同。)
编辑:我没有给予足够的重视。您可以匹配除 \"
之外的所有内容或空格,如下所示:(\\\\(?!")|[^\s\\])
,我认为。
这个怎么样:([^\\s\\\\]|\\\\(?!"))
。除了空格或\
或 \
后面没有"
时,这应匹配任何内容。