如何使用Java正则表达式将土耳其语字符转换为UTF-8
我想用Java做一个正则表达式操作。但当我搜索土耳其语文本时,我遇到了麻烦。比如,如何使用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正则表达式模式解决这
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]*$");
}