如何匹配特定角色的所有重音形式?

时间:2012-01-23 18:33:14

标签: regex unicode pcre

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

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

编辑:我不能首先对字符串进行ASCII格式化---字符串在数据库中我无法直接访问。事实上,我没有对此处的任何代码级访问权限。我能给出的唯一输入是正则表达式。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我认为你不能那样做。 根据您的语言/平台和需求,可能有用的解决方法是在匹配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.*"));