我需要在网站上替换我的文字中的姓名。但是文本中的名称只需要替换,而不是标记。
例如:
<img src="" title="Justin Bieber" /> bla bla bla bla Justin Bieber bla bla bla Justin Bieber bla bla bla bla
对此:
<img src="" title="Justin Bieber" /> bla bla bla bla <a href="http://en.wikipedia.org/wiki/Justin_Bieber">Justin Bieber</a> bla bla bla Justin Bieber bla bla bla bla
我找到了答案:
$text = '<img src="" title="Justin Bieber" /> bla bla bla bla Justin Bieber bla bla bla Justin Bieber bla bla bla bla';
$text = preg_replace('/Justin Bieber(?![^<>]*+>)/i', '<a href="http://en.wikipedia.org/wiki/Justin_Bieber">Justin Bieber</a>', $text, 1);
图像标记中只有一个而且没有。
答案 0 :(得分:1)
如果要解析任何复杂性的HTML,请使用HTML解析器。在此网站上搜索“HTML Parser”,您将获得许多很多结果。
如果您正在处理小的受控字符串,请使用正则表达式。
以下是非常简单示例:http://regexr.com?2vjqc
它只是检查“Justin Bieber”是否在引号内(因为它应该在HTML标记内)。有十几种方法可能会失败(空格,缺少引号,文档中其他地方的引号,格式错误的标签等)
当然,这个正则表达式可以改进但是如果你无法控制源代码,我强烈建议使用HTML解析器而不是正则表达式。
答案 1 :(得分:-2)
$text = '<img src="" title="Justin Bieber" /> bla bla bla bla Justin Bieber bla bla bla Justin Bieber bla bla bla bla';
$replacement = '<a href="http://en.wikipedia.org/wiki/Justin_Bieber">Justin Bieber</a>';
echo preg_replace('/\s+Justin Bieber/i', $replacement, $text, 1);