2013-02-20 60 views
0

我有以下代码。我试图让“a”标签内的所有内容都得到解决。目前它正在工作。作为输出我得到“第一”和“第二”。打开“a”标签和关闭“a”标签位于同一行。获取里面的一切<a></a> regexp

$v = 'this is test 
<a href="products.html">first</a> 
<a>second</a; 
preg_match_all("#<a\b[^>]*>(.*?)</a>#", $v, $foo); 
echo implode("\n", $foo[1]); 

但如果我写了下面的方式,

$v = '<a href="products.html">first 
</a> 
preg_match_all("#<a\b[^>]*>(.*?)</a>#", $v, $foo); 
echo implode("\n", $foo[1])'; 

在这里,我搬到了关“的一个”标签的第二行,现在它不给我任何输出。有谁知道如何使它工作?

+10

[不要使用正则表达式来解析HTML](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – 2013-02-20 14:03:12

+0

同一链接。每次。 – 2013-02-20 14:04:24

+0

尝试使用simple_html_dom http://simplehtmldom.sourceforge.net/使用正则表达式来解析html不是很好的解决方案。 – sanj 2013-02-20 14:10:13

回答

1

至于你所遇到的问题,那是因为你需要启用单行选项(s):

preg_match_all("#<a\b[^>]*>(.*?)</a>#s", $v, $foo); 

否则.不匹配换行符。

说明选项from the documentation的:

如果设定了此修正,在模式中的圆点元字符匹配 所有字符,包括换行。没有它,换行符被排除在外。

但是,你可能会更好的不使用正则表达式。 See this question for other approaches in PHP

+0

+1实际提供解决方案。那个旧的“不要使用正则表达式来解析HTML!”链接变得非常疲惫。 – 2013-02-20 14:37:03

+0

你能告诉我那是什么吗?谢谢。我用它,它工作完美。 – 2013-02-20 14:38:22