如何解决灾难性的回溯搜索括号中的数字
使用这个正则表达式:\((\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 ( ) 之外的任何字符,如果您想扩展它,请添加更多 -
\)
匹配)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。