从来没有想过有可能编写一个永远不会返回的正则表达式。
正则表达式
/^((?:\d|\w{1,2}[-\d\s])(?:[-\s\d]|\w{1,2}[-\d\s])*\d)$/
旨在匹配以数字或两个字母开头的数字,后跟破折号、空白或数字并以数字结尾。在开始模式之间可能会重复,或者可能会出现空格或破折号。
示例:1234、de-12943、EN - 12de -50
以下示例代码不会终止:
红宝石
#!/usr/bin/ruby
string = "101000000750000000000000000000000001000038127OXMOO0OOOOO00000000000N9"
re = /^((?:\d|\w{1,2}[-\d\s])(?:[-\s\d]|\w{1,2}[-\d\s])*\d)$/
p re.match("101000000750000000000000000000000001000038127OXMOO0OOOOO00000000000N9")
斯卡拉
"""^((?:\d|\w{1,2}[-\d\s])(?:[-\s\d]|\w{1,2}[-\d\s])*\d)$""".r findFirstIn "101000000750000000000000000000000001000038127OXMOO0OOOOO00000000000N9"
删除锚 (^, $) 可以让正则表达式快速终止。
尝试使用 Ruby 和 Scala。
那里发生了什么?锚不应该导致更快的终止吗?