java正则表达式否定类中的组
我使用Java的matcher使用以下正则表达式将术语分组到字符串中:
Pattern.compile("(\\\\\"[^\\\\\"]*\\\\\"|[^\\s\\\\\"]+)");
这是我遇到问题的部分:[^\s\\\“]
我希望它只匹配非空格和悬空转义引号,如\“。有没有办法在字符类中对\\和\”进行分组,以便它们只匹配在一起
我试图使用lookahead/lookback,但发现在character类中包含它让我回到了起点
你可以在下面搜索框中键入要查询的问题!
我使用Java的matcher使用以下正则表达式将术语分组到字符串中:
Pattern.compile("(\\\\\"[^\\\\\"]*\\\\\"|[^\\s\\\\\"]+)");
这是我遇到问题的部分:[^\s\\\“]
我希望它只匹配非空格和悬空转义引号,如\“。有没有办法在字符类中对\\和\”进行分组,以便它们只匹配在一起
我试图使用lookahead/lookback,但发现在character类中包含它让我回到了起点
# 1 楼答案
字符类与单个字符匹配。如果我理解正确,您只希望匹配字符串
\"
。要做到这一点,您不需要在所有regex\\"
匹配的地方使用字符类!(在Java字符串中,它看起来像\\\\\"
,这很可笑,但现在你已经有了它。)您可以使用括号将内容分组:
(\\\\\")
。您还可以使用|
在这样的组内进行交替。因此,要匹配非空格或\"
,可以这样做:(\S|\\\\\")
。(注意\S
与[^\s]
相同。)编辑:我没有引起足够的注意。除了
\"
或如下所示的空格,您可以匹配所有内容:(\\\\(?!")|[^\s\\])
,我认为罢工>这个怎么样:
([^\\s\\\\]|\\\\(?!"))
。这应该匹配除空格或\
或\
后面不跟"
之外的任何内容