Uma expressão regular para b
-
12-09-2019 - |
Pergunta
Estou escrevendo expressões regulares para texto Unicode em Java. No entanto, para o script específico que estou usando - Devanagari (0900 - 097F), há um problema com os limites das palavras. B corresponde a caracteres que são vogais dependentes (como 093E-094C), pois são tratados como caracteres espaciais.
Exemplo: Suponha que eu tenha a string: "कमल कमाल कम्हल कम्हाल" Observe que 'मा' na 2ª palavra é formado pela combinação म e ा (reconhecida como um caractere espacial). Da mesma forma na última palavra. Isso leva b a corresponder ao '' 'em' कमाल 'com expressão regular b w b, que não está correta de acordo com o idioma.
Espero que o exemplo ajude.
Posso escrever uma expressão regular que se comporta como b, exceto que não corresponde a certos chars? Qualquer feedback será grato.
Solução
Você deve conseguir realizar o que deseja com os seguintes operadores Regex:
(?=X) X, via zero-width positive lookahead
(?!X) X, via zero-width negative lookahead
(?<=X) X, via zero-width positive lookbehind
(?<!X) X, via zero-width negative lookbehind
(O acima é citado do Java 6 Pattern API Docs.)
Usar (?<![foo])(?=[foo])
no lugar de \b
antes de uma palavra, e (?<=[foo])(?![foo])
no lugar de \b
Depois de uma palavra, onde "[foo]
"É o seu conjunto de" personagens de palavras "
Outras dicas
O equivalente aos limites das palavras (se os limites não fossem o que você esperava) seria:
(?<!=[x-y])(<?=[x-y])...(?<=[x-y])(?![x-y])
Isso ocorre porque um "limite da palavra" significa "um local onde há um personagem de um lado e não do outro)
Portanto, com expressões de aparência e aparência, você pode definir sua própria classe de personagens [xy] para verificar quando você deseja isolar um "limite da palavra"