我想替换由“#”标记并以点或非字母数字字符结尾的变量。 示例:变量#name 应替换为“Peter”
abc#name.def => abcPeterdef abc#namedef => abc#namedef abc#name-def => abcPeter-def
So if the variable is terminated with a dot, it is replaced and the dot removed. Is it terminated by any non-alphanum character, it is replaced also.
I use the following:
s/#name\./Peter/i
s/#name(\W)/Peter$1/i
这可行,但是否可以将其合并到一个表达式中?
最佳答案
有几种可能的方法。
s/#name(\W)/"Peter" . ($1 eq "." ? "" : $1)/e
这里我们使用 /e
将替换部分转换为表达式,这样我们就可以检查 $1
并动态选择替换字符串。
s/#name(?|\.()|([^.\w]))/Peter$1/
这里我们使用(?|
)
来重置分支之间捕获组的编号,因此\.()
和 >([^.\w])
设置$1
。如果匹配 .
,则 $1
变为空字符串;否则它包含匹配的字符。
关于regex - Perl 正则表达式用于变量替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50010143/