【问题标题】:How to match all accented forms of a particular character?如何匹配特定字符的所有重音形式?
【发布时间】:2012-02-17 02:30:38
【问题描述】:

我想编写一个正则表达式,它将匹配使用某种 Unicode 编码编码的文本中特定字符的所有重音形式,而无需在字符类中明确列出所有此类形式。

因此,例如,如果我想匹配 a 的任何重音版本,[aàáâãäå] 是不够的,因为它只获得了 ISO-8859-1 中的 a,并且很可能是那里没有出现的其他口音。可以接受的东西是\p{Base_Character: a},如果在Unicode中定义了这样的东西。确实存在这样的东西吗?

编辑:我无法先将字符串 ASCII 化 --- 该字符串位于我无法直接访问的数据库中。事实上,我在这里没有任何代码级访问权限。我能给出的唯一输入是一个正则表达式。

【问题讨论】:

    标签: regex unicode pcre


    【解决方案1】:

    不,除了列出重音版本的相关代码之外,不存在任何库。 即使在 UTF-8 中,我也没有在代码中看到任何可辨别的模式。不过老实说,列出其他重音版本不会花费太长时间。

    【讨论】:

      【解决方案2】:

      我认为你做不到。 根据您的语言/平台和需求,一种可能会有所帮助的解决方法是在匹配a 之前对您的字符串进行“ascii-fy”。例如,在 Java 中:

          String s1 = "Hernán";
          String s2  = Normalizer.normalize(s1, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");
                  // s2: "Hernan"
          System.out.println(s2);
          System.out.println(s2.matches(".*a.*"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-21
        • 2016-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-16
        • 2017-11-20
        • 1970-01-01
        相关资源
        最近更新 更多