大家。我正在研究学校项目,我一直在努力使用雅虎管道清理饲料中的所有链接。
例如,从我的item.description中删除<a href="http://mickey.com">Go to Source</a>
。
在没有有效链接的情况下离开“ 转到来源 ”
我正在使用正则表达式模块,我尝试使用此表达式
#</?a[^>]*>#iu
但没有成功。请有人帮我这个。
答案 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 language和cannot be matched by regular expressions。你可以将可能与某些HTML匹配的东西组合在一起,并且有时可以工作,但是只要有些奇怪就会意外地失败。
现在,遗憾的是,Yahoo Pipes似乎没有包含HTML解析器。但是,根据this blog entry,您可以通过HTML Tidy管道传输数据,然后使用可以解析XML的Fetch Data模块以结构化格式提取数据。之后处理XML的工具并不理想(它们似乎不支持任何像XPath或CSS选择器查询一样有用的东西),但至少你可以用一个经过适当解析的结构化格式来处理数据。 HTML解析器。