我正在尝试用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 AYDEMIR
或Yıldırım -> Yildirim
)。
抱歉,关于我的语法错误!...
答案 0 :(得分:7)
使用Pattern.CASE_INSENSITIVE
和Pattern.UNICODE_CASE
标记:
Pattern p = Pattern.compile("yildirim", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
默认情况下, Pattern.CASE_INSENSITIVE
仅对US-ASCII字符集中的字符不区分大小写。 Pattern.UNICODE_CASE
修改行为,使其与所有Unicode字符不区分大小写。
请注意,Java regex中的Unicode不区分大小写的匹配是以对文化不敏感的方式完成的。因此,ı
,i
,I
,İ
被认为是相同的字符。
根据您的使用情况,如果要禁用模式中的所有元字符,或者仅使用Pattern.quote()
Pattern.LITERAL
答案 1 :(得分:5)
your comment中的问题比原始问题更复杂。
您可以使用
string=Normalizer.normalize(string, Normalizer.Form.NFD).replaceAll("\\p{Mn}", "");
将"İÖÜŞÇĞıöüşçğ"
转换为"IOUSCGıouscg"
,这对于不区分大小写的匹配已足以作为指向out by nhahtdh。如果您要执行区分大小写的匹配,则必须添加.replace('ı', 'i')
以匹配ı
i
。
答案 2 :(得分:0)
我正在使用此模式。
public static boolean isAlphaNumericWithWhiteSpace(String text) {
return text != null && text.matches("^[\\p{L}\\p{N}ın\\s]*$");
}
\ p {L}匹配类别“字母”中的单个代码点。
\ p {N}与任何脚本中的任何数字字符匹配。
答案 3 :(得分:-1)
git hub网址,用于替换土耳其语字符https://gist.github.com/onuryilmaz/6034569
在Java string.matches(".*[İÖÜŞÇĞıöüşçğ]*.")
中将检查字符串是否包含土耳其宪章。