使用 Regex 替换 VQMod 中所有出现的字符串
Using Regex replace all occurences of string within VQMod
我正在为 Opencart 2.3.x 构建一个扩展,我需要用 _DIR_IMAGE
替换所有出现的 DIR_IMAGE
,所以我想出了这个适用于PHP 单独,但不在 VQMod 中 mod:
<operation error="log">
<search position="replace"><![CDATA[/(.*?)(DIR_IMAGE)(.*?)/g]]></search>
<add><![CDATA[_DIR_IMAGE]]></add>
</operation>
这个 PHP- 只有效:
preg_replace('/(.*?)(DIR_IMAGE)(.*?)/g', '_DIR_IMAGE', $string);
任何人都可以指出我正确的方向吗?在这一点上,我假设上述表达式的替代方案受到赞赏。
首先,您需要告诉引擎使用具有 regex=true
属性的正则表达式。
另一个问题是 PHP preg_replace
不支持 g
,它会默认替换所有匹配项。
此外,您不需要这些组,因为 .*?
不限制上下文(提示:模式末尾的 .*?
never 匹配任何东西,它的组值总是一个空字符串,因为它是懒惰的,甚至没有尝试过),你可以只使用
<search regex="true" position="replace"><![CDATA[/DIR_IMAGE/]]></search>
<add><![CDATA[_DIR_IMAGE]]></add>
请注意,如果您需要限制匹配 DIR_IMAGE
的上下文,则正则表达式会更有意义。如果您需要匹配尚未预先添加 _
的 DIR_IMAGE
,请使用
<search regex="true" position="replace"><![CDATA[/(?<!_)DIR_IMAGE/]]></search>
^^^^^^
由于您使用的是 CDATA 块,因此如果 _
的左侧紧邻 _
,则无需在匹配失败的负后视 (?<!_)
中实体化 <
当前位置。
我正在为 Opencart 2.3.x 构建一个扩展,我需要用 _DIR_IMAGE
替换所有出现的 DIR_IMAGE
,所以我想出了这个适用于PHP 单独,但不在 VQMod 中 mod:
<operation error="log">
<search position="replace"><![CDATA[/(.*?)(DIR_IMAGE)(.*?)/g]]></search>
<add><![CDATA[_DIR_IMAGE]]></add>
</operation>
这个 PHP- 只有效:
preg_replace('/(.*?)(DIR_IMAGE)(.*?)/g', '_DIR_IMAGE', $string);
任何人都可以指出我正确的方向吗?在这一点上,我假设上述表达式的替代方案受到赞赏。
首先,您需要告诉引擎使用具有 regex=true
属性的正则表达式。
另一个问题是 PHP preg_replace
不支持 g
,它会默认替换所有匹配项。
此外,您不需要这些组,因为 .*?
不限制上下文(提示:模式末尾的 .*?
never 匹配任何东西,它的组值总是一个空字符串,因为它是懒惰的,甚至没有尝试过),你可以只使用
<search regex="true" position="replace"><![CDATA[/DIR_IMAGE/]]></search>
<add><![CDATA[_DIR_IMAGE]]></add>
请注意,如果您需要限制匹配 DIR_IMAGE
的上下文,则正则表达式会更有意义。如果您需要匹配尚未预先添加 _
的 DIR_IMAGE
,请使用
<search regex="true" position="replace"><![CDATA[/(?<!_)DIR_IMAGE/]]></search>
^^^^^^
由于您使用的是 CDATA 块,因此如果 _
的左侧紧邻 _
,则无需在匹配失败的负后视 (?<!_)
中实体化 <
当前位置。