我经常是regex的新手,所以我对我创建的正则表达式有几个问题。
我希望下面的表达式的粗体部分被捕获
SRC = “的 aifwoenflkwenflk ”的
我有自己创建的以下表达式:
((?<=src=)|(?<=href=))"(.*?)((?=")|(?='))"
它有效,但有两个问题,
我创建了一个能够完全符合我想要的新表达式:
((?<=src=')|(?<=href=')|(?<=src=")|(?<=href="))(.*?)((?=")|(?='))
虽然很长。必须有一些方法来优化它,以便它能够使用单引号或双引号,并且只捕获内部。有谁知道我怎么能做到这一点?
我感谢所有人的帮助!
答案 0 :(得分:1)
与往常一样,请考虑使用一个不错的DOM
解析器,它也会轻轻地使用单引号:
<?php
$data = <<<DATA
<a href="some string here">some link here</a>
<img src="some so'urce here">
<a href="some other string here">some link here</a>
DATA;
$doc = new DOMDocument();
$doc->loadHTML($data, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($doc);
# links
foreach ($xpath->query("//a[@href]") as $item) {
$source = $item->getAttribute('href');
echo $source;
}
# images
foreach ($xpath->query("//img[@src]") as $item) {
$source = $item->getAttribute('src');
echo $source;
}
?>
答案 1 :(得分:0)
$regex = '/(?:src|href)=["\']?([^"\'>]+)["\']?/';