regex - Perl 正则表达式用于变量替换

标签 regex perl

我想替换由“#”标记并以点或非字母数字字符结尾的变量。 示例:变量#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/

相关文章:

perl - 如何将 CV 分配给带有操作码列表的包?

perl - 如何让 WWW-Mechanize 登录富国银行网站?

c# - 用C#替换字符串中的数字

c# - 正则表达式:匹配没有 "style"属性的 HTML 标签

javascript - jQuery/JavaScript 干净的字符串,因此只有单词存在

linux - 删除部分绝对路径字符串

regex - Python Fabric - 在带空格的目录中删除与模式匹配的文件?

c# - 正则表达式在 .NET 中返回转义匹配 - 为什么?

php - 需要每2分钟ping 1000个url

Javascript 表单提交安全性