2 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
您可以嘗試:
(<a href=".*?)"(.*?)"(.*)
上述正則表達(dá)式的解釋:
(<a href=".*?)
- 代表第一個(gè)捕獲組捕獲捕獲第一個(gè)之前的所有內(nèi)容"
。請(qǐng)注意,我使用了惰性匹配,這有助于完成此任務(wù)。"
-"
從字面上匹配。(.*?)
- 表示第二個(gè)捕獲組捕獲xyz&123
介于兩者之間的數(shù)據(jù)"
。(.*)
- 代表第三個(gè)捕獲組,捕獲 后的所有內(nèi)容"
。$1\'$2\'$3
- 對(duì)于更換零件;將捕獲的組與單引號(hào)一起使用。
您可以在此處找到上述正則表達(dá)式的演示。
示例實(shí)現(xiàn) inf php:
<?php
$re = '/(<a href=".*?)"(.*?)"(.*)/m';
$str = '<p style="abc" rel="blah blah"> Hello I am p </p> <a href="https://example.com/abc?name="xyz&123""></a>';
$subst = '$1\'$2\'$3';
$result = preg_replace($re, $subst, $str);
echo $result;
您可以在此處找到上述代碼的示例運(yùn)行。

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
我嘗試過(guò)
preg_replace('/<a\s+[^>]*href\s*=\s*"([^"]+)"[^>]*>/', '<a href="\1">', $content)
正則表達(dá)式。但這會(huì)刪除錨標(biāo)記中除 href 之外的所有屬性。
也許更通用一些——一<a ...>
開(kāi)始就將所有這些東西排除在外?
沒(méi)有太多的 HTML 元素一href
開(kāi)始就具有屬性 - 即使您遇到具有這樣的href
值的不同元素,它在那里也沒(méi)有意義,因此無(wú)論如何它也需要替換。
#href="(\S+)"#
作為貪婪模式尋找并捕獲href="
和之間最長(zhǎng)的可能非空白字符串"
。這給出了href="https://example.com/abc?name="xyz&123""
完整匹配,以及https://example.com/abc?name="xyz&123"
部分匹配。
讓我們將后者輸入str_replace
以消除"
, 使用preg_replace
:
$content = preg_replace_callback('#href="(\S+)"#', function($m) { return 'href="'.str_replace('"', '', $m[1]).'"'; }, $content);
- 2 回答
- 0 關(guān)注
- 192 瀏覽
添加回答
舉報(bào)