【发布时间】:2013-06-03 13:40:45
【问题描述】:
我有这个正则表达式:
if (cadena.matches("^[a-zA-Z ]+$")) return true;
它接受从 A 到 Z 的小写和大写。也接受空格。
但这仅适用于英语。例如,在加泰罗尼亚语中,我们有“ç”字符。我们也有带有“á”或“à”等的字符。
用谷歌搜索,我找不到任何方法。
我发现我可以过滤 UTF-8 但这会接受不是真正字母的字符。
我该如何实现?
【问题讨论】:
我有这个正则表达式:
if (cadena.matches("^[a-zA-Z ]+$")) return true;
它接受从 A 到 Z 的小写和大写。也接受空格。
但这仅适用于英语。例如,在加泰罗尼亚语中,我们有“ç”字符。我们也有带有“á”或“à”等的字符。
用谷歌搜索,我找不到任何方法。
我发现我可以过滤 UTF-8 但这会接受不是真正字母的字符。
我该如何实现?
【问题讨论】:
【讨论】:
안녕。如果您特别想匹配拉丁字符 (ref),\p{IsLatin} 似乎更合适。
ë、ɶ 或ṧ,只能是represented by Unicode。 \p{IsLatin} 将匹配这些字符,而不匹配来自其他非拉丁字母的字符。
查看documentation 并使用一个类(例如\p{InLATIN_1_SUPPLEMENT})。
【讨论】:
Latin1Supplemental。即使在site:oracle.com 上搜索Latin1Supplemental 也找不到它。什么给了?
Character.UnicodeBlock 的文档。有一个名为LATIN_!_SUPPLEMENTAL 的常量,该名称可用于\p{} 名称。
Pattern.compile("\\p{InLATIN_1_SUPPLEMENT}")。注意Character.UnicodeBlock 常量之前的In。来自“掌握正则表达式”:“支持 Unicode 块,需要一个‘In’前缀。”
idName 和aliases 取自Character.UnicodeBlock.LATIN_1_SUPPLEMENT,它应该是\p{InLATIN_1_SUPPLEMENT}、\p{InLATIN-1 SUPPLEMENT} 或\p{InLATIN-1SUPPLEMENT}。