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

时间:2014-04-16 04:45:44

标签: php regex

我需要替换我网站周围的所有单引号实例。我想用双引号替换单引号。我知道一个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'>

3 个答案:

答案 0 :(得分:2)

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

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

Demo


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

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

这使用正向前瞻来检查属性值以您定义的URL开头。

Regex101 demo

答案 1 :(得分:1)

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

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

并替换为:

="\1"

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

答案 2 :(得分:1)

我假设您只想匹配前缀为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";
?>