0

这是我要匹配的模式:

<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);

它打印:

大批 ( )

4

4 回答 4

5

作为一般规则,正则表达式是解析 HTML 的一种非常糟糕的方法。它们不可靠,而且往往最终变得非常复杂。一个更强大的解决方案是使用 HTML 解析器。请参阅使用 PHP 和 DOM 解析 HTML

至于你的表达,我<div class="productTitle"在源代码中看不到任何地方,所以我从那里开始。同样,您正在尝试解析 URL,但没有提及锚标记(直接或通过足够的通配符),因此它也会在那里失败。基本上,该表达式看起来不像您要解析的 HTML。

于 2009-11-13T00:57:35.807 回答
1

... 或这个:

preg_match('/\s*([^>]+)\s*<\/a/',$string,$match);

也修剪一下。

于 2011-11-23T19:07:34.587 回答
0

图案:

/<div class="class">\s*<a href=\"([^"]+)\">([^<]+)</a>/m

将粗略地获取链接和文本,但使用 DOM 库将是一个更好的方法。

于 2009-11-13T01:32:58.463 回答
0

你可以试试这个:

<a href=".*?">([\s\S]*?)</a>
于 2009-11-13T01:37:48.690 回答