使用REGEX将域周围的单引号替换为双引号


Use REGEX to Replace Single Quotes with Double Quotes Around Domain

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

基本上,我希望能够运行查找和替换,并拥有目前看起来像这样的代码:

<img src='http://www.website.com/images/icons/main_icon.png' width='100' scalefit='1'>
<a href='http://www.website.com/page.php?variable1=a&variable2=b'>Click Here</a>
<form action='http://www.website.com/action.php?action=$action_type' method='post'>

变成这样:

<img src="http://www.website.com/images/icons/main_icon.png" width='100' scalefit='1'>
<a href="http://www.website.com/page.php?variable1=a&variable2=b">Click Here</a>
<form action="http://www.website.com/action.php?action=$action_type" method='post'>

PHP的DOMDocument类会自动为您执行此操作。您所需要做的就是加载HTML并将其保存回来。这可能比正则表达式工作得更好,因为它不依赖于标记格式。缺点是,它将修复所有HTML,而不仅仅是以特定域开头的属性周围的引号。

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

演示


我没有看到一个用例来替换,只是一些特定的HTML标记。但我不知道你想实现什么,所以我也会提供一个正则表达式解决方案:

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

这使用了一个正向前瞻来检查属性值,该值从您定义的URL开始。

Regex101演示

您可以匹配以下正则表达式:

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

并替换为:

="'1"

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

我假设您只想在前缀为http://www.website.com的情况下进行匹配。

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

<?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."'n";
?>