正则表达式使用Yahoo Pipes删除链接

时间:2009-12-13 10:14:03

标签: regex yahoo yahoo-pipes

大家。我正在研究学校项目,我一直在努力使用雅虎管道清理饲料中的所有链接。

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

在没有有效链接的情况下离开“ 转到来源

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

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

但没有成功。请有人帮我这个。

4 个答案:

答案 0 :(得分:1)

基本上,你想要的是:

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

这将捕获$ 1中的链接文本。 “*?”是一种非贪婪的比赛 - 这意味着它将匹配任何东西,但可能只有几次。

为了更加安全,您可能希望在奇数位置和案例选项中接受一些空格:

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

即使这不是防弹,但应该处理大多数情况。

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

答案 1 :(得分: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"

答案 2 :(得分:0)

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

答案 3 :(得分:0)

HTML为not a regular languagecannot be matched by regular expressions。你可以将可能与某些HTML匹配的东西组合在一起,并且有时可以工作,但是只要有些奇怪就会意外地失败。

现在,遗憾的是,Yahoo Pipes似乎没有包含HTML解析器。但是,根据this blog entry,您可以通过HTML Tidy管道传输数据,然后使用可以解析XML的Fetch Data模块以结构化格式提取数据。之后处理XML的工具并不理想(它们似乎不支持任何像XPath或CSS选择器查询一样有用的东西),但至少你可以用一个经过适当解析的结构化格式来处理数据。 HTML解析器。