繁体   English   中英

使用正则表达式替换字符串

[英]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示例

<?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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM