如何使用Java正则表达式将土耳其语字符转换为UTF-8

如何使用Java正则表达式将土耳其语字符转换为UTF-8,java,regex,unicode,turkish,Java,Regex,Unicode,Turkish,我想用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正则表达式模式解决这

我想用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转换为AYDEMIR
YıldıRım->Yildirim

对不起,关于我的语法错误

使用和标记:

模式。不区分大小写
默认情况下,仅对US-ASCII字符集中的字符进行不区分大小写的匹配
Pattern.UNICODE\u CASE
修改行为,使其不区分大小写地匹配所有UNICODE字符

请注意,Java正则表达式中的Unicode不区分大小写匹配是以不区分区域性的方式完成的。因此,
ı
i
i
ı
被认为是相同的字符

根据您的用例,如果您想禁用模式中的所有元字符,或者只使用模式中的转义文字部分,您可能需要使用
模式.LITERAL
。中的问题比原始问题更复杂

你可以用

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

“İÜŞĞışğğşğ”
转换为
“IOICGıouscg”
,这已经足够进行如上所述的不区分大小写匹配。如果要执行区分大小写的匹配,必须添加一个
.replace('ı','i')
以将
ı
i
匹配,以替换土耳其字符


在java
string.matches(“.*[İÜŞĞıöüşğ]*”)中,
将检查字符串是否包含土耳其特许权。

我正在使用此模式

public static boolean isAlphaNumericWithWhiteSpace(String text) {
        return text != null && text.matches("^[\\p{L}\\p{N}ın\\s]*$");
    }
\p{L}匹配“字母”类别中的单个代码点

\p{N}匹配任何脚本中的任何类型的数字字符


好的,但如何将“yildirim”转换为“y[iı]ld[i]r[i]m”。动态地,在每一个文本(“İÜŞĞışşğ”)中,我如何确定这个字符。你知道在.NET中实现相同行为的方法吗?斯特里比雪夫:这是个好问题。我原以为
IgnoreCase | cultural invariant
会管用,但事实证明并非如此。你可能想问一个新问题?(我也想知道答案)@Stribizev:实际上,在.NET中,我们可以通过设置适当的区域性(在本例中为土耳其语)来解决这个问题,尽管这意味着在处理输入之前,您必须至少知道输入的语言。我首先还检查了
CultureInvariant
标志。我会在有时间的时候研究这个问题。谢谢你的建议。我想我在解释我的问题时有点困难,但我确实用这个答案解决了我的问题。@Holger:你如何获得评论的链接?谢谢。@Sabuncu:右键单击用户名旁边的日期/时间,然后选择“复制链接位置”。您能将代码段放在后面的记号中编辑您的答案吗?这将提高可读性。
public static boolean isAlphaNumericWithWhiteSpace(String text) {
        return text != null && text.matches("^[\\p{L}\\p{N}ın\\s]*$");
    }