Regex 带有连字符、单引号和单间距的正则表达式字母数字正在超时(崩溃)

Regex 带有连字符、单引号和单间距的正则表达式字母数字正在超时(崩溃),regex,crash,struts,Regex,Crash,Struts,我使用了以下正则表达式,但它在我的浏览器中崩溃(什么都不做,然后可能超时) 我尝试接受字母数字,以及破折号和单引号。我还试图限制间距,只允许单个空格(连续不超过一个空格) 表达式格式 ^([a-zA-Z0-9'-]+\s?)*$ 与此崩溃的示例字符串如下: “ABCDEFGHIJKLMNOPQ43 5343443RSTUVWXYZ0123456789”–” 我正在使用Struts。有关于我做错了什么的提示吗?提前谢谢 我认为浏览器只是花了很长时间来处理regex搜索,甚至可能超时 您的示例字

我使用了以下正则表达式,但它在我的浏览器中崩溃(什么都不做,然后可能超时)

我尝试接受字母数字,以及破折号和单引号。我还试图限制间距,只允许单个空格(连续不超过一个空格)


表达式格式
^([a-zA-Z0-9'-]+\s?)*$
与此崩溃的示例字符串如下: “ABCDEFGHIJKLMNOPQ43 5343443RSTUVWXYZ0123456789”–”


我正在使用Struts。有关于我做错了什么的提示吗?提前谢谢

我认为浏览器只是花了很长时间来处理regex搜索,甚至可能超时

您的示例字符串

ABCDEFGHIJKLMNOPQ43 5343443RSTUVWXYZ0123456789 ‘ –
将不会与正则表达式匹配:

^([a-zA-Z0-9'-]+\s?)*$
添加特殊字符(“”-–),即

如果你想接受他们

^([a-zA-Z0-9'‘’—–-]+\s?)*$
此正则表达式与示例字符串匹配

更新: 尝试使用原子分组以避免灾难性回溯的正则表达式:

^(?>[a-zA-Z0-9'-]+\s?)*$

我找到了解决办法

我的旧表达:

^([a-zA-Z0-9'-]+\s?)*$
首先,我去掉了\s,因为它包含了我不想要的其他内容,如制表符、新行等

那个?是“贪婪的”,这意味着如果正则表达式失败,它将继续计算字符串的其余部分,直到确定它将返回失败。。。从本质上讲,+和?我们让它尝试并递归检查,使其资源密集型的更长字符串

以下表达式更适合我的情况:

^([a-zA-Z0-9' -])*$

你说的“撞车”是什么意思?你看到了什么输出?另外,请将
Struts
标签添加到您的帖子中,以便只有知道这是什么的人才会点击它。该页面根本没有响应性。我想这和一排不允许超过一个空间有关。我确实有一个struts标签。谢谢,但我不想再添加任何特殊字符(简单的和-可以)。我如何才能生成一个不超时的有效表达式??^(?>[a-zA-Z0-9'-]+\s?*$表达式似乎不起作用,正在regexpal.com上测试它
^([a-zA-Z0-9'-]+\s?)*$
^([a-zA-Z0-9' -])*$