这是我想要匹配的模式:
<div class="class">
<a href="http://www.example.com/something"> I want to be able to capture this text</a>
<span class="ptBrand">
这就是我在做的事情:
$pattern='{<div class="productTitle">[\n]<((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)>([^\n]*)</a>[\n]<span class="ptBrand">}';
preg_match($pattern, $data, $matches,PREG_OFFSET_CAPTURE);
print_r($matches);
打印:
Array()
答案 0 :(得分:5)
作为一般规则,正则表达式是解析HTML的一种非常糟糕的方法。它们不可靠,往往最终变得非常复杂。更强大的解决方案是使用HTML解析器。请参阅Parse HTML With PHP And DOM。
至于你的表达方式,我在源代码中的任何地方都看不到<div class="productTitle"
,所以我从那里开始。同样地,你试图解析一个URL,但没有提到锚标记(直接或通过足够的通配符),所以它也会在那里失败。基本上,表达式看起来与您尝试解析的HTML不同。
答案 1 :(得分:1)
......或者这个:
preg_match('/\s*([^>]+)\s*<\/a/',$string,$match);
修剪它。
答案 2 :(得分:0)
模式:
/<div class="class">\s*<a href=\"([^"]+)\">([^<]+)</a>/m
粗略地获取链接和文本,但使用DOM库将是一个更好的方法。
答案 3 :(得分:0)
你可以试试这个:
<a href=".*?">([\s\S]*?)</a>