簡體   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