不管是 .net 还是 perl,平衡组里面的固化分组都不要省略(除非你是神,能够百分百确定会匹配成功)
不仅仅是为了提高效率,更是为了避免过度回溯。
也可以用递归- $s = 'win s(dows s(" s(abc) ") )); s()'
- $p = 's\((?:(?>[^()]*)|\((?<Open>)|\)(?<-Open>))*(?(Open)(?!))\)'
-
- function fun($str) {
- [regex]::Matches($str, $p) | forEach {
- fun $_.Value.SubString(2);
- $_.Value;
- }
- }
- fun $s
复制代码
|