排除匹配内的引号

Luc*_*cas 0 php regex

我想foo='bar'从字符串中找到并替换- 一个常见的样式表链接

<link rel='stylesheet' href='http://www.foo.com/bar/baz.min.css' type='text/css' id='23434' foo='bar' media='all'/>
Run Code Online (Sandbox Code Playgroud)

意思是:foo可能到处都是,之后<link rel='styleshet'可能有空格,引号可以是单引号'或双引号"

到目前为止我的表达

/<link rel=[',"]stylesheet[',"].*(id=[',"].*[',"])/i
Run Code Online (Sandbox Code Playgroud)

显然它忽略了第一个和最后一个引用之间的引用 - 我尝试了一个负面的看法,但没有成功.

hek*_*mgl 5

使用HTML解析器:

// this is just a snippet for testing and demonstration purposes.
// The OP works with a complete HTML document.
$html = "<link rel='stylesheet' href='foo.com/bar/baz.min.css' type='text/css' id='23434' foo='bar' media='all'/>";

$dom = new DOMDocument();
$dom->loadHTML($html);

$selector = new DOMXPath($dom);

foreach($selector->query('//link[@type="text/css"]') as $link) {
    $link->removeAttribute('id');
    $link->removeAttribute('media');
}

echo $dom->saveHTML();
Run Code Online (Sandbox Code Playgroud)

看到它在这里工作: