这两个正则表达式有什么区别?

时间:2013-10-30 05:21:42

标签: java regex

这两个正则表达式之间有什么区别:

[a-zA-Z!@#$%^&*()_=;.?]+[0-9]+

[a-zA-Z]+[!@#$%^&*()_=;.?][0-9]+

令牌可以以多个字母字符开头,并以数字序列结束。它也可以从一个特殊字符开始,并以数字序列结束。

第一个正则表达式将字符串jkl3242oij92384nji332332!23#900&6382^832983@7729.979797_70979797分解为所需的标记,但第二个没有。为什么?

如何实现这个概念,只允许一个特殊字符?

3 个答案:

答案 0 :(得分:2)

我做对了之后:

([a-zA-Z]+|[!@#$%^&*()_=;.?])[0-9]+

以多个字母数字或一个特殊字母开头,仅以数字结尾。

Regex101

答案 1 :(得分:1)

区别在于正则表达式#1:[a-zA-Z!@#$%^&*()_=;.?]+[0-9]+会将字符串分解为至少一个字符的标记:[a-zA-Z!@#$%^&*()_=;.?]后跟至少数字[0-9]

另一方面,

正则表达式#2:[a-zA-Z]+[!@#$%^&*()_=;.?][0-9]+会将字符串分成至少一个字母[a-zA-Z]的标记,然后是{strong>一个 [!@#$%^&*()_=;.?] ,后跟至少一个数字[0-9]

答案 2 :(得分:0)

不是你问题的答案,但我发现这是调试正则表达式的一个非常有用的工具:https://www.debuggex.com/