簡體   English   中英

我如何將Java Regex用於土耳其語字符到UTF-8

[英]How I can use Java Regex for Turkish characters to UTF-8

我正在嘗試用Java進行正則表達式操作。 但是當我搜索土耳其文本時,我遇到了麻煩。 例如;

Search Text = "Ahmet Yıldırım" or "Esin AYDEMİR" 

//The e-mail stated in part(Ex: yildirim@example.com) , trying to look in name.
Regex Strings = "yildirim" or  "aydemir". 

搜索的文本是動態變化的。因此,如何通過使用java正則表達式模式來解決這個問題。 或者我如何轉換土耳其字符( Ex: AYDEMİR convert to AYDEMIRYıldırım -> Yildirim )。

對不起,關於我的語法錯誤!...

使用Pattern.CASE_INSENSITIVEPattern.UNICODE_CASE標志:

Pattern p = Pattern.compile("yildirim", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);

在ideone上演示

默認情況下, Pattern.CASE_INSENSITIVE僅對US-ASCII字符集中的字符不區分大小寫。 Pattern.UNICODE_CASE修改行為​​,使其與所有Unicode字符不區分大小寫。

請注意,Java regex中的Unicode不區分大小寫的匹配是以對文化不敏感的方式完成的。 因此, ıiIİ被認為是相同的角色。

根據您的使用情況,如果要禁用模式中的所有元字符,或者僅使用Pattern.quote()轉義模式的文字部分,則可能需要使用Pattern.LITERAL

您評論中的問題比原始評論更復雜。

您可以使用

string=Normalizer.normalize(string, Normalizer.Form.NFD).replaceAll("\\p{Mn}", "");

"İÖÜŞÇĞıöüşçğ"轉換為"IOUSCGıouscg" ,這已經足夠用於nhahtdh指出的不區分大小寫的匹配。 如果要執行區分大小寫的匹配,則必須添加.replace('ı', 'i')以匹配ıi

我正在使用這種模式。

public static boolean isAlphaNumericWithWhiteSpace(String text) {
        return text != null && text.matches("^[\\p{L}\\p{N}ın\\s]*$");
    }

\\ p {L}匹配“字母”類別中的單個代碼點。

\\ p {N}匹配任何腳本中的任何數字字符。

用於替換土耳其語字符的git hub url https://gist.github.com/onuryilmaz/6034569

在java string.matches(".*[İÖÜŞÇĞıöüşçğ]*.")將檢查字符串是否包含土耳其章程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM