我是正则表达式的新手,我找不到做我想做的事的方法。让我解释。我在记事本++中有一些看起来像这样的代码:
set a [expr $sumy+1]
set b [[expr $sumy+1] [expr $sumy+2] [expr $sumy+3]]
set c [expr $sumy+[lindex $coords 1]]
set d [expr [lindex [$ret] 2] + $Alpha]
set e [string range $SECNAME 0 [expr [string first - $SECNAME] -1] ]
而且我必须用 [expr {...}] 替换每个 [expr ... ] 模式(如果括号已经存在,则不能替换):
set a [expr {$sumy+1}]
set b [[expr {$sumy+1}] [expr {$sumy+2}] [expr {$sumy+3}]]
set c [expr {$sumy+[lindex $coords 1]}]
set d [expr {[lindex [$ret] 2] + $Alpha}]
set e [string range $SECNAME 0 [expr {[string first - $SECNAME] -1}] ]
为了完成这项工作,我使用正则表达式来查找每个 expr 模式并将其替换为新模式。对于情况 a 和 b,此正则表达式可以正常工作:
查找:(\[expr\s+)([^{][^\]]*)(\])
替换:\1{\2}\3
对于案例 c 和 d,我使用的是这个:
查找:((\[expr\s+)([^{][^\].*\]]*)(\].*)(\]))
替换:\1{\2\3}\4
(https://regex101.com/r/ZU6mNd/1)
但是我找不到正确匹配案例 e 的 expr 模式的方法。任何人都可以帮助我吗?我还想知道是否有办法用一个正则表达式匹配所有案例?也许用递归?
谢谢 !