mig*_*ira 3 ruby regex optimization
我有一个正则表达式,应该验证字符串是否由空格分隔的字符串组成.正则表达式运行良好(好吧它最终允许一个空的空间......但这不是他的问题)但是在验证失败时需要太长时间.
正则表达式如下:
/^(([\w\-]+)( )?){0,}$/
Run Code Online (Sandbox Code Playgroud)
尝试使用字符串进行验证时
"'this-is_SAMPLE-scope-123,this-is_SAMPLE-scope-456'"
Run Code Online (Sandbox Code Playgroud)
它需要2秒.
测试在ruby 1.9.2-rc1和1.8.7中进行.但这可能是一个普遍的问题.
任何的想法?
你的模式导致灾难性的回溯.灾难性部分可归纳为:
(.+)*
Run Code Online (Sandbox Code Playgroud)
该+和*在一些发动机灾难性的方式进行交互.
目前还不清楚你要匹配的是什么,确切地说,但它可能是这样的:
^[\w\-]+( [\w\-]+)*$
Run Code Online (Sandbox Code Playgroud)
匹配(如rubular.com上所示):
hello world
99 bottles of beer on the wall
this_works_too
Run Code Online (Sandbox Code Playgroud)
拒绝:
not like this, not like this
hey what the &#@!
too many spaces
Run Code Online (Sandbox Code Playgroud)
另一种选择是在原始模式的部分中使用占有量词和/或原子分组.
该{0,}重复通常简单地写成*.您还可以使用非捕获组来提高性能,即(?:pattern).
| 归档时间: |
|
| 查看次数: |
432 次 |
| 最近记录: |