[英]Replace string using regular expression
我总是遇到正则表达式,但是我并没有真正尝试理解和使用它们。 但是我当前的项目迫使我使用正则表达式,因此我需要一个可以给我正确的正则表达式来替换简单字符串的人。 基本上,我要替换从数据库中检索到的一小部分长文本。 长文本只是一个带有文本锚点的段落,其形式为:
<a href="example.com" title="blah3x">Example</a>
所以问题是我该如何替换title属性的值? 请注意,该文本可能还包含两个锚标记,因此我希望能够专门针对每个锚标记。
编辑:我想对此使用纯PHP。 我想我知道如何使用js / jquery做到这一点。
$doc = new DOMDocument();
$doc->loadHTML('<a href="example.com" title="blah3x">Example</a>');
$anchors = $doc->getElementsByTagName('a');
foreach ($anchors as $anchor)
{
$anchor->setAttribute('target', '__blank');
}
$html = $doc->saveHTML();
echo $html;
您可以使用以下正则表达式执行此操作
(<a\\b[^>]*?\\btitle=(['"]))(.*?)\\2
(
开始捕获组1 <a\\b
使用开尖括号和a
后跟断字 [^>]*?
消耗所有不靠近尖括号的字符,直到...。这迫使正则表达式停留在锚标记内 \\btitle=
消耗一个分词\\btitle=
和title=
,该中断\\btitle=
有助于进行一些其他检查 (['"])
捕获组2,确保正在使用一个开放的单引号或双引号 )
关闭捕获组1 (.*?)
开始捕获组3,并且进行非贪婪消耗以收集引号内的所有文本 \\2
引用捕获组2中的字符串,如果您使用单引号将其打开,则需要单引号将其关闭。 如果使用双引号,则相同。 在replace命令中,我只是将整个<a to the close quote
找到的字符串从<a to the close quote
替换为:用组捕获1,然后是所需的文本NewValue
然后是组捕获2中的闭引号。
<?php
$sourcestring="<a href="example.com" title="blah3x">Example</a>";
echo preg_replace('/(<a\b[^>]*?\btitle=([\'"]))(.*?)\2/im','\1NewValue\2',$sourcestring);
?>
$sourcestring after replacement:
<a href="example.com" title="NewValue">Example</a>
由于通过html解析器解析文本不是理想的解决方案 ,因此我将跳过有关使用Regex解析html的通常的肥皂盒免责声明。
$string=preg_replace(
'@<a (.*)title="(.*)"([^>]*)>(.*)</a>@iU',
'<a $1title="'.$replacement.'"$3>$4</a>',
$string);
请注意,表达式末尾的i
使其不区分大小写,而U
使其不贪心。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.