正则表达式匹配字母字符[重复]
Posted
技术标签:
【中文标题】正则表达式匹配字母字符[重复]【英文标题】:Regex matching letter characters [duplicate] 【发布时间】:2013-06-03 13:40:45 【问题描述】:我有这个正则表达式:
if (cadena.matches("^[a-zA-Z ]+$")) return true;
它接受从 A 到 Z 的小写和大写。也接受空格。
但这仅适用于英语。例如,在加泰罗尼亚语中,我们有“ç”字符。我们也有带有“á”或“à”等的字符。
用谷歌搜索,我找不到任何方法。
我发现我可以过滤 UTF-8 但这会接受不是真正字母的字符。
我该如何实现?
【问题讨论】:
看看Unicode blocks。 不知道是否有帮助:***.com/questions/896374/… 更相关:***.com/questions/6548815/… 也看看***.com/questions/9499851/... 【参考方案1】:使用这个正则表达式:
[\pL\s]+
\pL
表示任何 Unicode 字母。
fiddle.re Demo.
【讨论】:
这不也匹配非拉丁字符,这不是 OP 正在寻找的(即使他们确实接受了这个答案)?例如,它匹配안녕
。如果您特别想匹配拉丁字符 (ref),\pIsLatin
似乎更合适。
@NickChammas:op 明确希望匹配任何 Unicode 字母。
在事实发生 3 年后的这一点上,我认为这是一个有争议的问题 ? 但 OP 的标题和匹配加泰罗尼亚字母表的预期用例表明他们只想匹配拉丁字符而不是所有 Unicode(其中将包括其他字母,如韩语)。我没有看到 OP 明确想要匹配“任何 Unicode 字母”的位置。但无论如何,我赞成这个答案,因为它很有帮助。我希望我之前的评论可以帮助像我一样来到此页面寻找仅匹配拉丁字符而不是任何 Unicode 的方法的其他人。
详细说明一下,以防引起混淆,拉丁语!= ASCII。大多数拉丁字符,如ë
、ɶ
或ṧ
,只能是represented by Unicode。 \pIsLatin
将匹配这些字符,而不匹配来自其他非拉丁字母的字符。
最佳解决方案??【参考方案2】:
查看documentation 并使用一个类(例如\pInLATIN_1_SUPPLEMENT
)。
【讨论】:
本文档页面在任何地方都没有提到Latin1Supplemental
。即使在site:oracle.com
上搜索Latin1Supplemental
也找不到它。什么给了?
它可以被命名为不同的东西。请查看Character.UnicodeBlock
的文档。有一个名为LATIN_!_SUPPLEMENTAL
的常量,该名称可用于\p
名称。
这应该是:Pattern.compile("\\pInLATIN_1_SUPPLEMENT")
。注意Character.UnicodeBlock
常量之前的In
。来自“掌握正则表达式”:“支持 Unicode 块,需要一个‘In’前缀。”
@StefanvandenAkker 你是对的。我更正了我的答案。
@UwePlonus 抱歉,仍然无法编译。根据idName
和aliases
取自Character.UnicodeBlock.LATIN_1_SUPPLEMENT
,它应该是\pInLATIN_1_SUPPLEMENT
、\pInLATIN-1 SUPPLEMENT
或\pInLATIN-1SUPPLEMENT
。以上是关于正则表达式匹配字母字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章