【问题标题】:Regex in Java for "greater than" or "less than" without using bracket "<|>" symbolsJava中“大于”或“小于”的正则表达式,不使用括号“<|>”符号
【发布时间】:2019-05-30 18:48:20
【问题描述】:

我需要一个 Java Pattern.compile("") 的正则表达式,它可以匹配大于和小于符号而不实际使用括号符号。是否有一些特殊字符表示“>”或“

附加信息:原因是我的旧系统从资源文件中传递正则表达式,该资源文件首先使用一些 html 标记进行解析,额外的括号使解析器感到困惑,所以它出错了。解决方案是将“>”和“”和“

我尝试了什么:Pattern.compile("&grt;") 不会被解释为 ">"

【问题讨论】:

  • 仅供参考:对于单个字符之间的选择,请使用[] 字符类,即使用[&lt;&gt;] 而不是&lt;|&gt;。这也适用于下面的答案,其中 &lt;&gt; 字符已被替换,例如使用[\u003c\u003e]

标签: java regex


【解决方案1】:

我在移动设备上,无法运行它来测试,但我相信您可以使用 unicode 代码点来匹配括号。所以这应该工作:Pattern.compile("\\u003c|\\u003e");

【讨论】:

    【解决方案2】:

    有几种方法可以做到这一点:

    • 您可以将其写为 ASCII 序数,如下所示:((char) 60) + "|" + ((char) 62);
    • 您可以在正则表达式中使用 Unicode 转义序列:\\u003c|\\u003e;
    • 您可以使用 Java Unicode 转义序列,如下所示:\u003c|\u003e

    关于最后一点——它很少使用,但程序员可以在 Java 源代码中任何地方使用 Unicode 转义序列。例如,

    public\u0020class\u0020Main {
        public\u0020static\u0020void\u0020main(String[] args) { }
    }
    

    是有效的 Java 代码。

    【讨论】:

      【解决方案3】:

      您可以简单地转义这些字符,例如:

      Pattern.compile("\\<|\\>")
      

      通过使用反斜杠,您是在告诉正则表达式“按原样使用该字符!”

      有关转义字符的更多信息,请参阅https://www.baeldung.com/java-regexp-escape-char

      【讨论】:

      • 感谢您的评论。不幸的是,我不能在正则表达式的任何地方使用括号 - 由于预处理解析器,括号会导致错误。我需要匹配括号而不实际使用正则表达式中的括号
      • 我认为不可能?我想绕过前驱的另一种方法是将"\\&lt;|\\&gt;" 放在前驱无法触及的其他地方的变量中,然后在Pattern.compile 中使用该变量。我从来没有听说过不允许
      • 是的,我知道,我使用的旧系统存在问题。我可以更改的是资源文件,而不是使用资源文件的模块。管道设计从一个资源文件开始,该文件使用带有 括号的 html 标签进行解析,标签之间的所有内容都被发送到 Pattern.compile。我真的希望社区会为 > 提出类似 \{some numeric representation} 的建议
      • 也许你可以像 "" + ((char) 60) + "|" + ((char) 62) 这样用字符连接构造字符串? 60 和 62 是 的 ascii 数字
      • @JClassic 你不需要前面评论中的第一个""
      猜你喜欢
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多