正则表达式匹配数字字符串但不是纯数字字符串

时间:2017-10-12 21:46:58

标签: regex

假设我有两个字符类[1234](称之为“纯数字”)和[⓵⓶⓷⓸](称之为“时髦数字”)。我可以创建一个混合字符类,如[1234⓵⓶⓷⓸]+(称之为“数字式”),匹配一个或多个纯数字或时髦数字。

但是我希望能够只匹配数字字符串和至少一个时髦的数字。也就是说,匹配⓵2⓷4123⓸⓵⓶⓷⓸等字符串,但匹配1234这样的纯数字字符串。

你能想出一种将其表达为正则表达式的方法吗?

2 个答案:

答案 0 :(得分:2)

使用pcre(或支持占有量词的任何正则表达式引擎),你可以这样做:

/[1234]*+[1234⓵⓶⓷⓸]+/u

占有量词*+禁止回溯,在这种情况下,您确定至少有一个特殊数字(因为下一个数字只能是不在第一个字符类中的特殊数字之一)。

请注意,要处理这种多字节字符,必须使用u修饰符。

答案 1 :(得分:2)

因为我们不知道时髦数字的序列在哪里,我们需要以任意大小的数字式表达式[1234⓵⓶⓷⓸]*开始和结束表达式。

由于要求至少有一个时髦的数字,我们还需要匹配至少一个需要时髦的符号,[⓵⓶⓷⓸]

因此,我们得到的结果是[1234⓵⓶⓷⓸]*[⓵⓶⓷⓸][1234⓵⓶⓷⓸]*