2011-03-03 28 views
5

我正在試圖在文本中查找用戶輸入字符的unicode變體以突出顯示它們。例如。如果用戶輸入「Beyonce」,我想在文本中突出顯示帶有「Beyoncé」或「Beyônce」或Bèyönce等變體的所有文本。目前我唯一的想法是創建一個正則表達式,將輸入字符串替換爲一組字符組是這樣的:正則表達式來查找文本中某個字符的所有變體

"Beyonce" => "B[eêéè]y[óòôö]c[éèê]" 

但是,這似乎是這樣做的一個非常繁瑣和容易出錯的方式是什麼我基本上找的是符合給定的輸入字符的所有變體正則表達式字符組,東西比如\ p {M},但可以指定基本字母在java正則表達式中是否有這樣的可用性?如果不是,那麼正則表達式創建過程如何改進?我不認爲用手指定所有變體從長遠來看,它將起作用

+0

我唯一可以建議是存儲字符串,其中包含每個VA每個字符riant,那麼只需在正則表達式中每次使用該字符串 – 2011-03-03 10:59:40

回答

2

有幾種方法可以表示重音字符。有一個在java.text.Normalizer的javadoc的一個很好的例子:

For example, take the character A-acute. In Unicode, this can be encoded 
as a single character (the "composed" form): 

    U+00C1 LATIN CAPITAL LETTER A WITH ACUTE 

or as two separate characters (the "decomposed" form): 

    U+0041 LATIN CAPITAL LETTER A 
    U+0301 COMBINING ACUTE ACCENT 

第二種形式將使其相對容易進入非突出的性格,幸好正規化可以在這裏幫助您:

Normalizer.normalize(text, Form.NFD); // NFD = "Canonical decomposition" 

然後,您可以使用正則表達式忽略(或刪除)任何非ASCII字符從字符串,基於:

[^\p{ASCII}] 
+0

很好,我會盡力擺弄那個。謝謝。 – 2011-03-04 10:10:00

相關問題