[英]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.