第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何用小胡子表達(dá)式替換文檔中的 img src 和 link href?

如何用小胡子表達(dá)式替換文檔中的 img src 和 link href?

PHP
收到一只叮咚 2023-04-15 20:16:19
我試圖用一個(gè)小的修改來(lái)替換src,值hrefregex簡(jiǎn)單例子//Find:<img src="icons/google-icon.svg" > //Replace to: <img src="{{asset('icons/google-icon.svg')}}" >//Find:<link href="css/style.css"> //Replace to: <link href="{{asset('css/style.css')}}">/** etc... */現(xiàn)在這是我的正則表達(dá)式://Find:src\s*=\s*"(.+?)" //Replace to:src="{{ asset('$1') }}"它的工作實(shí)際上非常好,但它只適用于src不 [ href,src],我也想排除包含的任何值{{asset任何想法?提前致謝
查看完整描述

2 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

您可以使用交替來(lái)匹配srcor?href,然后使用否定前瞻來(lái)斷言 src/href 不以 開(kāi)頭{{asset

((?:src|href)\s*=\s*")((?!{{\s*asset)[^"]+)

這也將更改標(biāo)簽href內(nèi)<a>或其他地方的屬性。如果這是一個(gè)問(wèn)題,請(qǐng)改用DOMDocument解決方案。請(qǐng)注意,如果您的 HTML 不僅僅是一個(gè)片段,那么您不需要div在對(duì)的調(diào)用中在其周?chē)砑訕?biāo)記loadHTML,并且最后一行應(yīng)更改為echo substr($doc->saveXML(), 38);.

$html = <<<EOT

//Find:

<img src="icons/google-icon.svg" >?

//Replace to:?

<img src="{{asset('icons/google-icon.svg')}}" >


//Find:

<link href="css/style.css">?

//Replace to:?

<link href="{{asset('css/style.css')}}">

/** etc... */

<a >

EOT;


$doc = new DOMDocument();

$doc->loadHTML("<div>$html</div>", LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);


$xpath = new DOMXPath($doc);

foreach ($xpath->query('//img') as $img) {

? ? $src = $img->getAttribute('src');

? ? if (preg_match('/^(?!{{\s*asset).*$/', $src, $m)) {

? ? ? ? $img->setAttribute('src', "{{asset('" . $m[0] . ")'}}");

? ? }

}


foreach ($xpath->query('//link') as $link) {

? ? $href = $link->getAttribute('href');

? ? if (preg_match('/^(?!{{\s*asset).*$/', $href, $m)) {

? ? ? ? $link->setAttribute('href', "{{asset('" . $m[0] . ")'}}");

? ? }

}


// strip XML header and added <div> tag

echo substr($doc->saveXML(), 44, -6);

輸出:


//Find:

<img src="{{asset('icons/google-icon.svg)'}}"/>?

//Replace to:?

<img src="{{asset('icons/google-icon.svg')}}"/>


//Find:

<link href="{{asset('css/style.css)'}}"/>?

//Replace to:?

<link href="{{asset('css/style.css')}}"/>

/** etc... */

<a />


查看完整回答
反對(duì) 回復(fù) 2023-04-15
?
繁星點(diǎn)點(diǎn)滴滴

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊

這可以/應(yīng)該用 DomDocument 來(lái)完成。

還值得一提的是,在用于訪問(wèn)變異文檔時(shí),將花括號(hào)添加到屬性字符串(它們被編碼)時(shí)會(huì)產(chǎn)生錯(cuò)誤的副作用。saveHTML()要解決此問(wèn)題,請(qǐng)使用saveXML()并刪除文檔前面的 xml 標(biāo)記。

我將您的示例標(biāo)簽包裝在父標(biāo)簽中,以便 DomDocument 可以正常運(yùn)行,而不會(huì)破壞您的文檔結(jié)構(gòu)。這可能是您的項(xiàng)目不必要的預(yù)防措施。

我的代碼片段直接使用 XPath 定位符合條件的屬性,并在沒(méi)有任何正則表達(dá)式的情況下替換它們的值。我的 xpath 表達(dá)式中的豎線 (?|) 表示“或”——因此它以 img 標(biāo)簽的 src 屬性或鏈接標(biāo)簽的 href 屬性為目標(biāo)。

代碼:

$html = <<<HTML

<div>

? ? <img src="icons/example.svg">

? ? <a >a link</a>

? ? <link href="css/example.css">

? ? <iframe src="http://www.example.com/default.htm"></iframe>

</div>

HTML;


$dom = new DOMDocument();

$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

$xpath = new DOMXPath($dom);

foreach ($xpath->query('//img/@src | //link/@href') as $attr) {

? ? $attr->value = "{{asset('" . $attr->value . "')}}";

}

echo substr($dom->saveXML(), 38);? // remove the auto-generated xml tag from the start

輸出:


<div>

? ? <img src="{{asset('icons/example.svg')}}"/>

? ? <a >a link</a>

? ? <link href="{{asset('css/example.css')}}"/>

? ? <iframe src="http://www.example.com/default.htm"/>

</div>

哎呀,我剛剛看到你問(wèn)題中的最后一個(gè)請(qǐng)求。

not()和的實(shí)現(xiàn)?starts-with()應(yīng)用于兩個(gè)標(biāo)簽,以取消已經(jīng)轉(zhuǎn)換為小胡子代碼的元素的資格。

新的 xpath 表達(dá)式:

//img[not(starts-with(@src,"{{asset"))]/@src?|?//link[not(starts-with(@href,"{{asset"))]/@href



查看完整回答
反對(duì) 回復(fù) 2023-04-15
  • 2 回答
  • 0 關(guān)注
  • 127 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)