我对一个看似简单的特殊正则表达式感到有些困惑。
匹配必须是只包含a-z,A-Z,0-9的字符串,并且必须在字符串中的任何位置至少出现一个“ - ”字符。
我有[a-zA-Z0-9-]+
但问题是,它也会匹配那些没有' - '字符的人。
ABC123-ABC //should match
ABC123ABC //shouldn't match.
答案 0 :(得分:24)
这应该有效:
^([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}$
你明白了这一点:)
答案 1 :(得分:4)
彼得的解决方案:( ^([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 -
答案 2 :(得分:2)
这是一个简单的正则表达式:
^(?=.*-)[a-zA-Z0-9-]+$