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

标签 java regex

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

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

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

我希望它只匹配非空格和悬空转义引号,例如\"。有没有办法将\\和\"分组到字符类中,以便它们只匹配在一起?

我尝试使用lookahead/lookbehind,但发现将其包含在字符类中会让我回到第一个位置。

最佳答案

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

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

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

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

关于java - 正则表达式 - 否定类中的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10825584/

相关文章:

java - 使用迭代时超出 Clojure GC 开销限制

java - 带有附加到 Design Element 的 jar 的 Domino Java 代理会导致 OutOfMemory 错误

python - 如何查找 bs4 的所有字符串?

regex - 在 Ocaml 中匹配 z1 或 z2 的正则表达式

regex - 使用 sed 进行变量字符串转换

java - ReadableMap 中的键数?

java - Zxing NotFoundException 条码 128C

java - 如何在映射中查找与正则表达式不匹配的字符串键?

java - 使用 hibernate3 从 mysql 检索 utf-8 字符串时出现问题

java - 如何终止 Java 中的正则表达式匹配?