我如何使用 Java 正则表达式将土耳其语字符转换为 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". 

搜索到的文本是动态的 changing.Therefore ,如何使用 java 正则表达式模式解决此问题。或者如何转换土耳其语字符(Ex: AYDEMİR convert to AYDEMIRYıldırım -> Yildirim)。

抱歉,关于我的语法错误!...

使用Pattern.CASE_INSENSITIVE and Pattern.UNICODE_CASE标志:

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

Demo on ideone

Pattern.CASE_INSENSITIVE 默认只匹配 US-ASCII 字符集中的字符,不区分大小写。 Pattern.UNICODE_CASE 修改行为以使其匹配所有 Unicode 字符时不区分大小写。

请注意,Java 正则表达式中不区分大小写的 Unicode 匹配是以不区分文化的方式完成的。因此,ıiIİ被认为是同一个字符。

根据您的用例,如果您想禁用模式中的所有元字符,或者仅使用 Pattern.quote()[=24= 转义模式的文字部分,您可能需要使用 Pattern.LITERAL ]

中的问题比原题复杂

您可以使用

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

"İÖÜŞÇĞıöüşçğ" 转换为 "IOUSCGıouscg",这对于 指出的不区分大小写的匹配已经足够了。如果要执行区分大小写的匹配,则必须添加 .replace('ı', 'i') 以匹配 ıi

git hub url 用于替换土耳其字符 https://gist.github.com/onuryilmaz/6034569

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

我正在使用这个模式。

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

\p{L} matches a single code point in the category "letter".

\p{N} matches any kind of numeric character in any script.