【问题标题】:Java regexp multiple exclusion conjonctionJava 正则表达式多重排除连接
【发布时间】:2022-06-19 16:29:44
【问题描述】:

我目前正在根据https://www.json.org 网站上定义的语法编写自己的 Java JSON 解析器

特别是,'escape' 对象由列表中的任何元素定义:'"'、'\'、'/'、'b'、'f'、'n' , 'r', 't' 或 'u hex hex hex hex'(其中 hex 指任何十六进制数字)

虽然 'character' 由任何字符定义,但以下字符除外:任何 ASCII 控制字符 (0x00-0x1F)、'"'、'\' 或 '\' + escape强>

然后我尝试使用 ["\\/bfnrt]|u[0-9A-Fa-f]{4} 定义 escape 正则表达式,这似乎可以正常工作。

String ESCAPE_REGEXP="[\"\\\\/bfnrt]|u[0-9A-Fa-f]{4}";

但是我找不到如何计算 字符 的正则表达式。我试图将其定义为非字符析取的否定形式: ^([\u0000-\u001f] | [\"\\] | \\("+ESCAPE_REGEX+"))";

但它似乎不起作用。我还想知道是否可以计算多个否定正则表达式的合取(逻辑与)?

感谢您的帮助:)

【问题讨论】:

    标签: java json regex


    【解决方案1】:

    我认为您编写的第二个正则表达式存在一些问题。

    之前和之后 |有一个空格会改变正则表达式模式。

    其次,我想您可能希望将 ESCAPE_REGEX 放在捕获组的开头而不是结尾,因为在字符 \" 的场景中[\\] 和 [\"] 模式恰好彼此相邻,将首先匹配,没有匹配转义正则表达式。

    应该是这样的:

    (\\([\"\\/bfnrt]|u[0-9A-Fa-f]{4})|[\u0000-\u001f]|[\"]|[\\])
    

    这是一个测试正则表达式的链接。

    https://regex101.com/r/W9lw6u/6

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多