php - 正则表达式纠正 php 代码 - 替换字符串,不包括某些情况
问题描述
我正在审查我的旧 php 软件,我需要做一些一般性的更正。我正在尝试通过正则表达式自动执行其中一些,但在某些情况下没有成功。我使用 Netbeans。
我需要全部替换:
$line[word_test]
和
$line['word_test']
不包括 word_test 是 var(即 $abc)或数字或包含字符串“const”的情况
我尝试了几个正则表达式
\$line\[[^'|\$|constan](.*)\]
但没有成功。我需要正则表达式在“包含文本”字段中写入,并且在 Netbeans 替换功能的“替换为”字段中写入。
解决方案
一种选择是使用带有负前瞻的捕获组。
(\$line\[)(?!\d|\$\w|[^\]]*const)([^\]]+)(\])
解释
(\$line\[)
捕获组 1,匹配$line[
(?!
负前瞻,断言直接向右的不是\d|\$\w|[^\]]*const
匹配一个数字,$
后跟一个单词 char 或const
)
关闭前瞻([^\]]+)
捕获组 2,匹配任何字符,除了]
(\])
捕获第 3 组,匹配]
在替换中使用 3 个捕获组
$1'$2'$3
如果@Nigel Ren$line['word_test1']
在评论中指出已经存在格式,您可以扩展否定前瞻:
(\$line\[)(?!'.*?'\]|\d|\$\w|[^\]]*const)([^\]]+)(])
推荐阅读
- modeling - 如何在整数编程中对复杂的 if-then 语句进行建模
- centos - 在 CentOS 上为 Perl6 安装 Linenoise:找不到库“luv”
- javascript - 使用 p5.js,是否可以绘制一个在其内部绘制子类的类?例如,由 1x1 块组成的 4x4 块
- java - 创建、更新和管理 Spring Bean
- wifi - Raspbian Stretch 上的多个 DHCP 网络
- javascript - discord.js 上新语音通道的默认位置
- java - 如何在 Java 中实际实现(FaaS)Monolith to Microservice Serverless 架构?
- php - 带有公钥/私钥的 PHP SFTP
- python-3.x - Selenium 可与 Chrome + 扩展一起使用,但不能与无头参数一起使用
- amazon-web-services - 如何使用 JSON 格式将 lambda 请求 ID 记录到 AWS CloudWatch Api 网关日志组中?