我有一个文本,我想用“?”替换所有“www.domain.com”。符号。用规则替换文本中的链接
www.domain.com DSA DSAD悲悲SA domain.com asdasds ADAS DSA www.domain.com/someurl/?d伤心sadsad www.domain.com/someurl/ ASD ASD SA www.domain .com?id = 123 sd asdsa d
因此,我正在使用preg_match_all()
搜索文本,并查找所有没有“?”的链接。运行循环,当我运行str_replace()
它一次替换所有的“domain.com”,即使是那个“?”并且在下一次迭代时,它将更多的“add_text”添加到替换的domain.com,所以我通过“domain.com?add_text?add_text”得到了情况等等。我有我想从PREG_OFFSET_CAPTURE
取代文本的开始位置,但不知道它是否对我有帮助。 感谢
$post_content = 'www.domain.com dsa dsad sad sad sa
domain.com asdasds adas dsa
www.domain.com/someurl/?d sad sadsad
www.domain.com/someurl/ asd asd sa
www.domain.com?id=123 sd asdsa d'.'<hr>';
$pattern = '#(www\.|https?:\/\/)?(domain.com)\S*#i';
if($num_found = preg_match_all($pattern, $post_content, $out, PREG_OFFSET_CAPTURE))
{
if ($num_found>0){
foreach ($out[0] as $k => $v) {
if (strpos($v, '?') !== false) {
//skip
}else{
//replace
$post_content = str_replace($v, $v.'?add_text, $post_content);
}
}
}
}
输入:
www.domain.com DSA DSAD悲悲SA domain.com asdasds ADAS DSA www.domain.com/someurl/?d伤心sadsad WWW。 domain.com/someurl/ ASD ASD SA www.domain.com?id=123 SD asdsa d
预期输出:
www.domain.com?add_text DSA DSAD悲悲SA domain.com?add_text asdasds ADAS DSA www.domain.com/someurl/?d伤心sadsad www.domain.com/someurl/?add_text asd asd sa www.domain.com?id=123 sd asdsa d
所以每个URL都有一些get参数。没有“?”的每个网址(get)必须与?add_text相关,如果已经有某个东西就跳过它。
能否请您分享您的输入和预期的输出? –
@SahilGulati完成。谢谢。 – SERG