如何编写正则表达式匹配官方及形似小写的字母(排除数字上下标)?
匹配官方小写字母及形似小写的上下标字符的正则方案
问题背景
要编写正则匹配两类字符:一是Unicode官方定义的小写字母,二是形似小写的上下标字符,但需排除上下标中的数字(如²、₃这类)。之前的尝试存在以下问题:
[a-z]+:仅匹配ASCII小写,漏过ñ这类Unicode小写字母;\p{Ll}+:匹配所有官方小写,但无法匹配ₗ、ₒ这类未被归类为小写的上下标形似字符;\p{Ll}+|\p{In_Superscripts_and_Subscripts}+:过于宽泛,会误匹配A²中的数字上标²。
解决方案
根据正则引擎的不同,提供两种精准匹配的写法:
1. 支持Unicode属性交集的引擎(PCRE、PHP、Python regex库等)
[\p{Ll}\p{In_Superscripts_and_Subscripts}&&\P{Numeric_Type=Digit}]+
- \p{Ll}:匹配所有Unicode官方定义的小写字母;
- \p{In_Superscripts_and_Subscripts}&&\P{Numeric_Type=Digit}:筛选出属于上下标字符区块,但不属于数字类型的字符,完美排除上下标数字,仅保留形似小写的字母类上下标。
2. 不支持属性交集的引擎(JavaScript等)
使用正向预查结合字符类实现:
(?:\p{Ll}|(?=\p{In_Superscripts_and_Subscripts})\P{Numeric_Type=Digit})+
- 分支1:匹配官方小写字母
\p{Ll}; - 分支2:通过
(?=\p{In_Superscripts_and_Subscripts})限制字符属于上下标区块,再用\P{Numeric_Type=Digit}排除数字类型,最终仅保留目标字符。
验证效果
- 对
ESPAñOL:可匹配到ñ; - 对
THIS LOOKS A LOT LIKE ₗₒ𝓌ₑᵣ𝒸ₐₛₑ:可完整匹配ₗₒ𝓌ₑᵣ𝒸ₐₛₑ; - 对
A²:不会匹配到数字上标²。
内容的提问来源于stack exchange,提问作者soapergem
相关产品推荐
相关产品推荐

