我知道这是缓慢的,因为([.-][a-z0-9])*
。但我不知道如何优化它。
^https://([a-z0-9]+([.-][a-z0-9])*)+(.([a-z]{2,11}|[0-9]{1,5}))(:[0-9]{1,5})?(/.*)?$
你不必在你的模式中使用)*)+
这一部分。这也可能导致灾难性的回溯。
注意如果正则表达式的分隔符也是/
,则只需要转义反斜杠,并且不需要转义[.-]
如果你以后不需要捕获组,你可以省略它们。
^https://[a-z0-9]+(?:[.-][a-z0-9]+)*.(?:[a-z]{2,11}|[0-9]{1,5})(?::[0-9]{1,5})?(/.*)?$
模式匹配:
^
字符串 起始https://
匹配https://
因为你只想匹配https[a-z0-9]+
匹配1+倍所列(?:[.-][a-z0-9]+)*
可选地重复匹配.
或-
,并1+次列出的任何.(?:[a-z]{2,11}|[0-9]{1,5})
匹配2-11个字符a-z或匹配1-5个数字(?::[0-9]{1,5})?
可选匹配:
和1-5位数字(/.*)? Optionally match
/'和其余行$
字符串结束
Regex演示