php - 如何使用 PHP 替换所有标题属性中的单词
问题描述
我四处搜索,只找到了不特定于我下面需要的替换选项。
然而,我发现最接近的是:
preg_replace('/<a(.*)title="([^"]*)"(.*)>/','chocolate chip cookies',$items);
我认为这个问题的答案也可以帮助其他有类似需求的人。
简单地说,如果可能,我想在一个语句中将所有标题属性(title="")中的特定单词替换为其他单词。这应该适用于超链接和图像标题属性。
例如:我将在所有标题属性中将单词“巧克力”、“巧克力饼干”和“巧克力香草饼干”更改为“巧克力片饼干”,如下例所示。
但是,我不想更改URL 或链接文本中的“巧克力”一词。
共有 50 个项目列表和 50 个单独的超链接,所有这些都放在一个数组中。因此,替换代码最好在一个语句中替换整个数组中的单词。
注意:如果示例 3 太难,那么示例 1 和示例 2 的答案就足够了。
示例 1:
<a class="dessert" href="http://mywebsite.com/chocolate.php" title="Try out our new chocolate">chocolate</a>
示例 2:
<a class="dessert" href="http://mywebsite.com/chocolate.php" title="Try out our new chocolate cookies">chocolate</a>
示例 3:
<a class="dessert" href="http://mywebsite.com/chocolate.php" title="Try out our new chocolate vanilla cookies">chocolate</a>
期望的结果:
<a class="dessert" href="http://mywebsite.com/chocolate.php" title="Try out our new chocolate chip cookies">chocolate</a>
谢谢你。
解决方案
例如,您可以使用DomDocumentgetElementsByTagName
来查找元素并使用模式测试 title 属性的值:
\bchocolate(?:(?:\hvanilla)?\hcookies)?\b
解释
\b
字边界chocolate
从字面上匹配(?:
非捕获组(?:\hvanilla)?
可选择匹配水平空白字符和香草\hcookies
匹配水平空白字符和cookie
)?
关闭组并使其可选\b
字边界
如果模式匹配,那么您可以设置新标题。
$html = <<<HTML
<a class="dessert" href="http://mywebsite.com/chocolate.php" title="Try out our new chocolate">chocolate</a>
<a class="dessert" href="http://mywebsite.com/chocolate.php" title="Try out our new chocolate cookies">chocolate</a>
<a class="dessert" href="http://mywebsite.com/chocolate.php" title="Try out our new chocolate vanilla cookies">chocolate</a>
HTML;
$doc = new DomDocument();
$fragment = $doc->createDocumentFragment();
$fragment->appendXML($html);
$doc->appendChild($fragment);
$nodes = $doc->getElementsByTagName('a');
foreach ($nodes as $node) {
$node->setAttribute(
"title",
preg_replace("~\bchocolate(?:(?:\hvanilla)?\hcookies)?\b~", "chocolate chip cookies", $node->getAttribute("title")
)
);
}
echo $doc->saveHTML();
输出
<a class="dessert" href="http://mywebsite.com/chocolate.php" title="Try out our new chocolate chip cookies">chocolate</a>
<a class="dessert" href="http://mywebsite.com/chocolate.php" title="Try out our new chocolate chip cookies">chocolate</a>
<a class="dessert" href="http://mywebsite.com/chocolate.php" title="Try out our new chocolate chip cookies">chocolate</a>
推荐阅读
- wpf - 如何将国家/地区列表作为 XAML 中组合框的自动完成
- python - 如何将 Django 中的线程替换为 Celery 工作者
- javascript - Svelte 反应性如何在函数内部工作?
- ionic4 - 在 sdk 和 gradle 中设置 android 以在 ionic 中运行 cordova comand 时出错
- java - 爪哇 | 将数据处理程序写入文件的方法花费的时间比预期的要长
- python-3.x - 无法在列表中搜索列表中的记录
- vue.js - Vue中如何实现右键菜单的导航动作?
- vuejs2 - VueJS 将输入绑定到日期值
- angular - 网站和管理面板的文件结构
- javascript - NodeJS|Cluster:如何处理消息传递的对象?