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.

Foi útil?

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"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top