我该如何创建一个正则表达式,它只匹配包含字母和数字的字符串?
我尝试了类似这样的表达式:(?>[A-z]+)([a-z0-9]+)
。
这个正则表达式应该返回以下结果:
1234b --> true
1234 --> false
abcd --> false
abcd4 --> true
12b34 --> true
我该如何创建一个正则表达式,它只匹配包含字母和数字的字符串?
我尝试了类似这样的表达式:(?>[A-z]+)([a-z0-9]+)
。
这个正则表达式应该返回以下结果:
1234b --> true
1234 --> false
abcd --> false
abcd4 --> true
12b34 --> true
(?:\d+[a-z]|[a-z]+\d)[a-z\d]*
基本上,其中1和a是任何数字和任何字母,它匹配由任何数量的字母数字字符包围的1a或a1。
编辑:现在更短,可能更快。
其他答案是不正确的,它们将允许任何仅包含字母、数字或两者的字符串。我的表达式将特别排除仅由字母或仅由数字组成的字符串。
[A-Za-z0-9]*([a-zA-Z]+[0-9]+|[0-9]+[a-zA-Z]+)
任意数量的字母和数字,后面至少跟着一个字母再跟着一个数字或者至少一个数字再跟着一个字母。
然而可能有更简单的方法。我的看起来有些冗长。也许不是这样的。有人想为此提供帮助吗?:P
^(?:[0-9]*[A-Z]|[A-Z]*[0-9])[A-Z0-9]*$
。使用您正在使用的任何正则表达式引擎的不区分大小写修饰符。 - Tim Pietzckerecho 'a1b2' | grep -o -E "(?:[0-9]*[A-Z]|[A-Z]*[0-9])[A-Z0-9]*$"
- sleepsort^([a-Z]+[0-9]+|[0-9]+[a-Z]+)[a-Z0-9]*$
还有一个受TimPietzcker启发的简化版本:
^([a-Z]+[0-9]|[0-9]+[a-Z])[a-Z0-9]*$
[a-Z]
可能与[A-Za-z]
的含义不同。 - ghoti如果不必要,就不要只使用一个正则表达式。使用两个必须都匹配的正则表达式。在Perl中,可以这样写:
if ( /[a-zA-Z]/ && /\d/ )
é
是一个字母吗?你知道[A-z]
也会匹配像|
这样的字符吗?你正在使用哪个正则表达式引擎? - Tim Pietzcker