微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

灾难性的回溯搜索括号中的数字

如何解决灾难性的回溯搜索括号中的数字

使用这个正则表达式:\((\W*\d*\W*)*\) 我正在寻找括号内的数字。这些数字可以被任何符号包围,但不能被字符包围,这种模式可以在括号内出现很多次,我的意思是我需要匹配这里的所有内容

  • (8)
  • (8,)
  • ( 8'' )
  • (8,9,8,9)
  • (18,9',89;)
  • (' 7; 27; 37.38; 48 ; 55)

但不是:

  • (8j)
  • (a888)
  • (1,2; 12.13; 25.26; 35.36; 43.45; 52.56; 59,6o)

正好是最后一个例子给了我一个灾难性的回溯错误。我怎样才能避免这个错误?我真的不明白该怎么做...

解决方法

您可以将正则表达式更改为 \([\W\d]*\),这将匹配和不匹配您的示例。

https://regex101.com/r/DNmuEb/1/

,

\((\W*\d*\W*)*\) 的灾难性回溯是由于嵌套的可选量词造成的,并且一切都是可选的。

注意 \W 也可以匹配 ()

您可以匹配除字符 A-Z a-z 或括号之外的任何空白字符,如果需要匹配所有内容,请在括号之间至少断言一个数字

\((?=[^()\d]*\d)[^A-Za-z()]+\)
  • \( 匹配 (
  • (?=[^()\d]*\d) 在括号之间至少声明一个数字
  • [^A-Za-z()]+ 匹配 1+ 次除字符 A-Z a-z ( ) 之外的任何字符,如果您想扩展它,请添加更多
  • \) 匹配 )

Regex demo

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。