php - Preg_replace 忽略包含 Wordpress 简码的正则表达式
问题描述
我正在构建一个 PHP 函数,用 preg_replace 替换用户生成的字符串中的“My Term”(对于本例),除非“My Term”位于封闭的短代码标签内,如下所示:
'Replace My Term here [link attr="ignore My Term here"]ignore My Term here[/link]'
所以本质上,正则表达式应该替换字符串中“My Term”的所有实例,除非它们位于“[link”和“[/link]”之间。
我想出了以下正则表达式,当它没有被字母数字字符包围并且不在方括号之间时,它匹配“我的术语”。
preg_replace('~(?<![A-Za-z0-9\]])My Term(?![A-Za-z0-9\[])(?=(?:(?:[^\]]*+\]){2})*+[^\]]*+\z)~', $replacement, $text);
然而!这也忽略了随机短代码之间的所有“我的术语”实例,如下所示:
'[shortcode1] this instance of My Term is ignored when it shouldnt be [shortcode2]'
如何更改此正则表达式以仅在将文本放置在封闭的“[link”和“[/link]”标签之间时忽略文本?
解决方案
好吧,事实证明我使用了一种完全错误的方法,即对单括号字符使用环视。
我目前的正则表达式
'~(?<![A-Za-z0-9\]"])My Term(?![A-Za-z0-9\["])(?!(.(?!\[link))*\[/link\])~'
完全符合我的需要:preg_replace 现在忽略 [link] 标记之间以及引号旁边的“我的术语”,但不在其他随机短代码之间时。
推荐阅读
- c - 在 CGC 挑战二进制文件上运行 Kvasir 的问题
- tensorflow - 如何调试模型 / tf.data 中的错误,在急切模式下工作正常,但在 keras.fit 中出现错误
- python - discord py 中的@client.command() 对我不起作用
- ansible - 创建 Json 文件
- python - Python单元测试,日期时间
- laravel - Laravel - 编辑存储在 AWS S3 上的 Microsoft Word 文档
- asp.net-mvc - 独立 IIS 服务器无法根据启动 url/启动 url/默认视图启动 Web 应用程序
- triggers - 在机会更新上调用现有触发器
- javascript - 如何从 Firebase Firestore 中的 .set() 获取自动生成的 ID?
- python - 在 Python 中更改函数参数名称