假设我有两个字符类[1234]
(称之为“纯数字”)和[⓵⓶⓷⓸]
(称之为“时髦数字”)。我可以创建一个混合字符类,如[1234⓵⓶⓷⓸]+
(称之为“数字式”),匹配一个或多个纯数字或时髦数字。
但是我希望能够只匹配数字字符串和至少一个时髦的数字。也就是说,匹配⓵2⓷4
,123⓸
和⓵⓶⓷⓸
等字符串,但不匹配1234
这样的纯数字字符串。
你能想出一种将其表达为正则表达式的方法吗?
答案 0 :(得分:2)
使用pcre(或支持占有量词的任何正则表达式引擎),你可以这样做:
/[1234]*+[1234⓵⓶⓷⓸]+/u
占有量词*+
禁止回溯,在这种情况下,您确定至少有一个特殊数字(因为下一个数字只能是不在第一个字符类中的特殊数字之一)。
请注意,要处理这种多字节字符,必须使用u修饰符。
答案 1 :(得分:2)
因为我们不知道时髦数字的序列在哪里,我们需要以任意大小的数字式表达式[1234⓵⓶⓷⓸]*
开始和结束表达式。
由于要求至少有一个时髦的数字,我们还需要匹配至少一个需要时髦的符号,[⓵⓶⓷⓸]
。
因此,我们得到的结果是[1234⓵⓶⓷⓸]*[⓵⓶⓷⓸][1234⓵⓶⓷⓸]*
。