我正在使用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';
现在尝试匹配第三行关键字的第二个,它将不起作用。
答案 0 :(得分:1)
要以多行模式进行搜索,您需要在正则表达式的末尾添加s
,以便在有换行符时它将继续搜索。
更多信息,link
这有效吗?
$search = preg_quote($search);
return preg_replace("/^((?:(?:.*?$search){".--$occurrence."}.*?))$search/s", "$1$replace", $subject);
}