Как да съпоставим всички ударени форми на даден знак?

Бих искал да напиша регулярен израз, който ще съответства на всички форми с ударение на определен знак в текст, кодиран с помощта на някакво Unicode кодиране, без изрично да изброявам всички такива форми в клас знаци.

Така че, например, ако искам да съпоставя която и да е версия с ударение на a, [aàáâãäå] е недостатъчно, тъй като получава само a, които живеят в ISO-8859-1, и може да има други ударения, които не се срещат там . Нещо, което би било приемливо, е нещо като \p{Base_Character: a}, ако имаше такова нещо, дефинирано в Unicode. Съществува ли нещо, което прави това?

Редактиране: Не мога първо да направя низа в ASCII --- низът е в база данни, до която нямам пряк достъп. Всъщност нямам достъп на ниво код до нищо тук. Единственият вход, който мога да дам, е регулярен израз.


person uckelman    schedule 23.01.2012    source източник


Отговори (2)


Не, не съществуват библиотеки, които да правят нещо друго освен изброяване на свързаните кодове за версии с ударения. Дори в рамките на UTF-8 не виждам никакви забележими модели сред кодовете. Честно казано обаче, съставянето на този списък с други версии с акцент няма да отнеме много време.

person mvrak    schedule 23.01.2012

Не мисля, че можеш да направиш това. Заобиколно решение, което може да помогне, в зависимост от вашия език/платформа и нужди, е „ascii-fy" вашия низ, преди да съответства на a. Например в 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.*"));
person leonbloy    schedule 23.01.2012