我需要替换我网站周围的所有单引号实例。我想用双引号替换单引号。我知道一个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'>
答案 0 :(得分:2)
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开头。
答案 1 :(得分:1)
答案 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";
?>