我使用 Java 的匹配器通过以下正则表达式对字符串中的术语进行分组:
Pattern.compile("(\\\\\"[^\\\\\"]*\\\\\"|[^\\s\\\\\"]+)");
这是我遇到问题的部分:[^\s\\\"]
我希望它只匹配非空格和悬空转义引号,例如\"。有没有办法将\\和\"分组到字符类中,以便它们只匹配在一起?
我尝试使用lookahead/lookbehind,但发现将其包含在字符类中会让我回到第一个位置。
最佳答案
字符类匹配单个字符。如果我理解正确的话,您只想匹配字符串 \"
。为此,您根本不需要字符类 - 正则表达式 \\"
已经匹配了! (在 Java 字符串中,它看起来像 \\\\\"
,这很荒谬,但你已经看到了。)
您可以使用括号将内容分组在一起:(\\\\\")
。您还可以使用|
在这样的组内交替。 。因此要匹配非空格或 \"
,你可以这样做:(\S|\\\\\")
。 (请注意 \S
与 [^\s]
相同。)
编辑:我没有给予足够的关注。您可以匹配除 \"
之外的所有内容或空格如下:(\\\\(?!")|[^\s\\])
,我想。
这个怎么样:([^\\s\\\\]|\\\\(?!"))
。这应该匹配除空格或 \
之外的任何内容。 或 \
后面没有 "
.
关于java - 正则表达式 - 否定类中的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10825584/