我想从字符串中找到并替换foo='bar'
- 一个常见的样式表链接
<link rel='stylesheet' href='http://www.foo.com/bar/baz.min.css' type='text/css' id='23434' foo='bar' media='all'/>
意味着:foo
可能位于<link rel='styleshet'
之后的任何地方,之后可能会有空格,引号可以是单'
或双"
到目前为止我的表达
/<link rel=[',"]stylesheet[',"].*(id=[',"].*[',"])/i
显然它忽略了第一个和最后一个引用之间的引用 - 我尝试了一个负面的看法,但没有成功。
答案 0 :(得分: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();
看到它在这里工作:
答案 1 :(得分:1)
要回答标题中的文字问题,[^"]
是“除引号之外的任何字符”。但是hek2mgl对你当前的问题有正确的答案:使用HTML解析器。
答案 2 :(得分:0)
如果
foo='bar'
总是在
之后id='23434'
你可以使用
/.+id=.+\s(.+)\s/