PHP preg_replace 字符第二次出现
PHP preg_replace second occurence of character
如何调整下面的代码以使用 preg_replace 替换第二个 » 字符?
$out = 'Home » Food » Fruit';
$out = preg_replace('/»/', 'Category:', $out, 1);
提前致谢!
要仅删除字符串的第二次出现,您需要匹配第一个,然后匹配 并捕获 直到第二个的所有文本,然后替换为反向引用。
使用
$out = 'Home » Food » Fruit';
$out = preg_replace('/(»[^»]*)»/', 'Category:', $out, 1);
echo $out;
见PHP demo。最后一个 $limit
参数将 preg_replace
仅替换第一个匹配项。
详情:
(»[^»]*)
- 捕获第 1 组匹配
»
- 文字 »
[^»]*
- »
以外的任何字符出现 0+ 次(由于 *
量词)
»
- 文字 »
参见regex demo。
仅 Boost/PCRE(和最新版本的 Onigmo)支持的变体也适用于您:
/»[^»]*\K»/
参见 another regex demo。 \K
将丢弃当前迭代中到目前为止匹配的所有文本。所以你只会用你的替换字符串替换匹配中的结束 V 形。
如何调整下面的代码以使用 preg_replace 替换第二个 » 字符?
$out = 'Home » Food » Fruit';
$out = preg_replace('/»/', 'Category:', $out, 1);
提前致谢!
要仅删除字符串的第二次出现,您需要匹配第一个,然后匹配 并捕获 直到第二个的所有文本,然后替换为反向引用。
使用
$out = 'Home » Food » Fruit';
$out = preg_replace('/(»[^»]*)»/', 'Category:', $out, 1);
echo $out;
见PHP demo。最后一个 $limit
参数将 preg_replace
仅替换第一个匹配项。
详情:
(»[^»]*)
- 捕获第 1 组匹配»
- 文字»
[^»]*
-»
以外的任何字符出现 0+ 次(由于
*
量词)»
- 文字»
参见regex demo。
仅 Boost/PCRE(和最新版本的 Onigmo)支持的变体也适用于您:
/»[^»]*\K»/
参见 another regex demo。 \K
将丢弃当前迭代中到目前为止匹配的所有文本。所以你只会用你的替换字符串替换匹配中的结束 V 形。