regex - 用于变量替换的 perl 正则表达式
问题描述
我想替换用“#”标记并以点或非字母数字字符结尾的变量。示例:变量#name 应替换为“Peter”
abc#name.def => abcPeterdef abc#namedef => abc#namedef abc#name-def => abcPeter-def
因此,如果变量以点结尾,则将其替换并删除该点。它是否由任何非字母字符终止,它也被替换。
我使用以下内容:
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
。如果 a.
匹配,$1
则成为空字符串;否则它包含匹配的字符。
推荐阅读
- javascript - 根据组合框 Ext JS 中的选定选项显示文本
- javascript - 一个二维数组后跟一个带有两个字符串的括号有什么作用?
- spring - 同一用户在客户端 X 和 Y 中都有角色 ADMIN,但在客户端 Z 中没有角色 - 如何在 Spring Security 中处理它?
- javascript - 如何从 div 中提取数据,并使用 JavaScript 在同一页面内的其他 div 中显示(引导模式)
- java - 在属性文件中设置 - 通过 Spring Boot 的 Bcrypt 数据源密码
- angular - 如何从“app/Athlete”导入{ Athlete }?
- javascript - 附加到来自 ajax 请求的数据
- regex - 正则表达式在 nginx 中阻止 url
- python - 从 TF2 中的 SavedModel 获取操作
- git - 拉取项目后项目内的文件夹无法访问其他开发者