有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java正则表达式否定类中的组

我使用Java的matcher使用以下正则表达式将术语分组到字符串中:

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

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

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

我试图使用lookahead/lookback,但发现在character类中包含它让我回到了起点


共 (1) 个答案

  1. # 1 楼答案

    字符类与单个字符匹配。如果我理解正确,您只希望匹配字符串\"。要做到这一点,您不需要在所有regex\\"匹配的地方使用字符类!(在Java字符串中,它看起来像\\\\\",这很可笑,但现在你已经有了它。)

    您可以使用括号将内容分组:(\\\\\")。您还可以使用|在这样的组内进行交替。因此,要匹配非空格\",可以这样做:(\S|\\\\\")。(注意\S[^\s]相同。)

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

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