2

每个人。我正在做学校项目,我一直在努力使用雅虎管道清理提要中的所有链接。

例如<a href="http://mickey.com">Go to Source</a>从我的 item.description 中删除。

离开没有活动链接的“转到源代码”

我正在使用正则表达式模块,并尝试使用此表达式

#</?a[^>]*>#iu

但没有成功。请有人可以帮我解决这个问题。

4

4 回答 4

1

本质上,你想要的是:

<a.*?>(.*?)</a>

这将捕获 $1 中的链接文本。“。*?” 是一个非贪婪的匹配 - 这意味着它将匹配任何东西,但尽可能少。

为了更加安全,您可能希望在奇怪的地方接受一些空格和大小写选项:

<\s*[Aa].*?>(.*?)<\s*/[Aa]\s*>

即使这也不是万无一失的,但应该可以处理大多数情况。

如果您使用的是“正则表达式”模块而不是“字符串正则表达式”模块,请不要忘记 g 和 s 选项。

于 2010-01-08T16:24:46.690 回答
1

尝试这个:

$html = 'This is some text <a href="http://mickey.com">Go to Source</a> more text';
$result = preg_replace('%<a[ ]{1}.*?>(.*?)</a>%i', '$1', $html);
echo $result // echo's "This is some text Go to Source  more text"
于 2011-08-16T23:14:44.427 回答
0

HTML 至少是一种上下文无关的语言。用正则表达式正确解析 CFL 是不可能的。因此,这是不可能的。使用适当的 HTML 解析库并重新处理 DOM 树或偶数流(取决于接口)以适应您想要做的事情。

于 2009-12-13T21:41:29.710 回答
0

HTML不是正则语言不能被正则表达式匹配。您可以将一些可能与某些 HTML 匹配的东西放在一起,并且有时会起作用,但一旦出现一些奇怪的东西就会意外地失败。

现在,可悲的是,Yahoo Pipes 似乎没有包含 HTML 解析器。但是,根据此博客条目,您可以通过HTML Tidy管道数据,然后使用他们的Fetch Data模块,该模块可以解析 XML 以结构化格式提取数据。之后处理 XML 的工具并不理想(它们似乎不支持任何像 XPath 或 CSS 选择器查询一样有用的东西),但至少您可以处理已由适当的结构化格式解析的数据HTML 解析器。

于 2010-01-08T17:13:36.877 回答