每个人。我正在做学校项目,我一直在努力使用雅虎管道清理提要中的所有链接。
例如<a href="http://mickey.com">Go to Source</a>
从我的 item.description 中删除。
离开没有活动链接的“转到源代码”
我正在使用正则表达式模块,并尝试使用此表达式
#</?a[^>]*>#iu
但没有成功。请有人可以帮我解决这个问题。
每个人。我正在做学校项目,我一直在努力使用雅虎管道清理提要中的所有链接。
例如<a href="http://mickey.com">Go to Source</a>
从我的 item.description 中删除。
离开没有活动链接的“转到源代码”
我正在使用正则表达式模块,并尝试使用此表达式
#</?a[^>]*>#iu
但没有成功。请有人可以帮我解决这个问题。
本质上,你想要的是:
<a.*?>(.*?)</a>
这将捕获 $1 中的链接文本。“。*?” 是一个非贪婪的匹配 - 这意味着它将匹配任何东西,但尽可能少。
为了更加安全,您可能希望在奇怪的地方接受一些空格和大小写选项:
<\s*[Aa].*?>(.*?)<\s*/[Aa]\s*>
即使这也不是万无一失的,但应该可以处理大多数情况。
如果您使用的是“正则表达式”模块而不是“字符串正则表达式”模块,请不要忘记 g 和 s 选项。
尝试这个:
$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"
HTML 至少是一种上下文无关的语言。用正则表达式正确解析 CFL 是不可能的。因此,这是不可能的。使用适当的 HTML 解析库并重新处理 DOM 树或偶数流(取决于接口)以适应您想要做的事情。
HTML不是正则语言,不能被正则表达式匹配。您可以将一些可能与某些 HTML 匹配的东西放在一起,并且有时会起作用,但一旦出现一些奇怪的东西就会意外地失败。
现在,可悲的是,Yahoo Pipes 似乎没有包含 HTML 解析器。但是,根据此博客条目,您可以通过HTML Tidy管道数据,然后使用他们的Fetch Data模块,该模块可以解析 XML 以结构化格式提取数据。之后处理 XML 的工具并不理想(它们似乎不支持任何像 XPath 或 CSS 选择器查询一样有用的东西),但至少您可以处理已由适当的结构化格式解析的数据HTML 解析器。