我对一个看起来很简单的正则表达式有点困惑。
匹配必须是一个只有a-z, a-z, 0-9的字符串,并且必须在字符串的任何地方至少出现一个'-'字符。
我有[a-zA-Z0-9-]+
,但问题是,它也将匹配那些没有'-'字符。
ABC123-ABC //should match
ABC123ABC //shouldn't match.
应该可以:
^([a-zA-Z0-9]*-[a-zA-Z0-9]*)+$
如果你想有135个连字符:
^([a-zA-Z0-9]*-[a-zA-Z0-9]*){135}$
或者如果您希望至少有23个连字符但不超过54个连字符:
^([a-zA-Z0-9]*-[a-zA-Z0-9]*){23,54}$
你明白了:)
Peter的解决方案:(^([a-zA-Z0-9]*-[a-zA-Z0-9]*)+$
)在给定匹配的字符串时执行良好。然而,当出现一个不匹配的字符串时,这个表达式会经历灾难性的回溯,比如:
aa-aa-aa-aa-aa-aa-aa-aa-aa-aa-aa-aa%
下面是避免这个问题的正则表达式:
^[a-zA-Z0-9]*-[-a-zA-Z0-9]*$ # Match one or more -
^([a-zA-Z0-9]*-){5}[a-zA-Z0-9]*$ # Match exactly 5 -
^([a-zA-Z0-9]*-){1,5}[a-zA-Z0-9]*$ # Match from 1 to 5 -
下面是一个简单的正则表达式:
^(?=.*-)[a-zA-Z0-9-]+$