preg_replace模式不适用于HTML标签

时间:2018-10-07 00:39:08

标签: php

我正在使用preg_replace模式从字符串($occurrence)替换关键字($search)的第n个实例($subject)。

$search = preg_quote($search);
return preg_replace("/^((?:(?:.*?$search){".--$occurrence."}.*?))$search/", "$1$replace", $subject);
}

该模式适用于纯文本,但是如果存在HTML标签,例如<br />,它将停止。

我对正则表达式了解不多,我的代码来自here

我需要帮助修复模式以忽略考虑HTML标记的存在。

编辑:原来问题出在HTML标记之外。问题是换行符。

如果$subject有换行符,它将在第一个换行符后不匹配$search

示例:

$subject = 'This is the first line
This is the second line
This is the third line';

现在尝试匹配第三行关键字的第二个,它将不起作用。

1 个答案:

答案 0 :(得分:1)

要以多行模式进行搜索,您需要在正则表达式的末尾添加s,以便在有换行符时它将继续搜索。

更多信息,link

这有效吗?

$search = preg_quote($search);
return preg_replace("/^((?:(?:.*?$search){".--$occurrence."}.*?))$search/s", "$1$replace", $subject);
}