PHP从文本中提取相对链接
我试图从html页面中提取所有链接,包括相关链接。我正在使用正则表达式获取所有URL——这很容易——但我也想找到相关链接。因此,我希望能够找到:PHP从文本中提取相对链接,php,regex,dom,Php,Regex,Dom,我试图从html页面中提取所有链接,包括相关链接。我正在使用正则表达式获取所有URL——这很容易——但我也想找到相关链接。因此,我希望能够找到: <a href="http://www.google.com">Some Link</a> 我也希望能够找到 <a href="somepage.php">Some Other Link</a> 我需要使用尽可能少的内存尽快完成这项工作,所以我尽量避免使用DOM之类的东西。有人
<a href="http://www.google.com">Some Link</a>
我也希望能够找到
<a href="somepage.php">Some Other Link</a>
我需要使用尽可能少的内存尽快完成这项工作,所以我尽量避免使用DOM之类的东西。有人有什么想法吗?怎么样
\<a.*?(?:href=['"](.*)?['"]|\>)
\只是尝试一下这样的东西。够了吗
$a = '<a href="http://www.google.com">Some Link</a>';
$p = '/href=\"(?<href>.*?)\">(?<content>.*?)</';
preg_match_all($p, $a, $m);
var_dump($m);
$a='';
$p='/href=\“(?*?)\”>(?*?)那么,您可以只查找href
和src
属性?你需要它来获取所有链接,还是只获取属性中的链接?嗯,字符类[]
和捕获组()
..@HamZa我基本上使用[]
来获取或中的链接,因为我相信()
s通过保存匹配项来消耗更多内存:
它的工作方式有两种:简单地说,[ab]
将匹配a
或b
。它与(a | b)
相同,那么(a | b)
将其添加到捕获组中。您可以使用非捕获组(?:a | b)
。但是[a | b]
意味着匹配a、b或文字
@HamZa这是一个好音符。不过,它在[href |>]
中并不太好用。还是把|
放在那里好吗?字符类与组(捕获或不捕获)完全不同。一个字符类就像一个袋子,你可以将单个可能的字符按任何顺序放入其中(一种集合)[href]
与[refh]
,[efhr]
,[fhre]
,[hfer]
,[freh]
和so-weiter相同。因此,模式的这部分[href=['“]
被视为一个字符类,可以用[[r'e=“hf]
或任何您想要的置换来替换。现在,正如HamZa所解释的,如果您想在几个子字符串之间进行选择,必须使用将这些子字符串括在内(?:…)
并用一个|
分开。哈,是的,对不起,这是一种新的堆叠方式!
$b = '<a href="somepage.php">Some Other Link</a>';
preg_match_all($p, $b, $m2);
var_dump($m2);