关于php:使用REGEX替换单引号与域名双引号

Use REGEX to Replace Single Quotes with Double Quotes Around Domain

我需要替换我的网站周围的所有单引号实例。我想用双引号替换单引号。我知道一个正则表达式应该能做到这一点,但我不知道如何构造它。我希望它能影响任何包含以http://www.website.com开头的字符串的单引号。

基本上,我希望能够运行查找和替换,并拥有当前类似的代码:

1
2
3
<img src='http://www.website.com/images/icons/main_icon.png' width='100' scalefit='1'>
Click Here
<form action='http://www.website.com/action.php?action=$action_type' method='post'>

变成这样:

1
2
3
<img src="http://www.website.com/images/icons/main_icon.png" width='100' scalefit='1'>
Click Here
<form action="http://www.website.com/action.php?action=$action_type" method='post'>

PHP的domDocument类会自动为您执行此操作。您只需要加载HTML并将其保存回去。这可能比regex更好,因为它不依赖于标记格式。缺点是它将修复所有HTML,而不仅仅是以特定域开头的属性的引号。

1
2
3
4
$dom = new DOMDocument;
libxml_use_internal_errors(TRUE);
$dom->loadHTML($html);
$result = $dom->saveHTML();

演示

我看不到仅替换某个特定HTML标记的用例。但是我不知道你想要完成什么,所以我也会提供一个regex解决方案:

1
preg_replace("#\b\w+\s*='((?=http://www\.website\.com)[^']+)'#is",'"$1"',$html);

这将使用一个正的先行检查来检查属性值是否以您定义的URL开头。

ReGEX101演示


我假设您只想匹配前缀是http://www.website.com的情况。

注意,在下面的表达式中,我们使用!作为regex分隔符,因此不必在表达式中转义/

1
2
3
4
5
6
<?php
$input="<img src='http://www.website.com/images/icons/main_icon.png' width='100' scalefit='1'>";
$output = preg_replace("!src='(http://www\.website\.com[^']+)'!", 'src="\\1"', $input);
echo $output."
"
;
?>


您可以匹配以下regex:

=\'(http:\/\/www\.website\.com.+?)\'

替换为:

="\1"

演示:http://regex101.com/r/wq7jv5