每个人。我正在学校项目上工作,我一直在努力清理使用雅虎管道的饲料中的所有链接。正则表达式使用Yahoo管道去除链接
例如从我的item.description中删除<a href="http://mickey.com">Go to Source</a>
。
留下“转至源”无主用链路
我使用正则表达式的模块,我试图用这句话
#</?a[^>]*>#iu
但没有成功。请有人可以帮我解决这个问题。
每个人。我正在学校项目上工作,我一直在努力清理使用雅虎管道的饲料中的所有链接。正则表达式使用Yahoo管道去除链接
例如从我的item.description中删除<a href="http://mickey.com">Go to Source</a>
。
留下“转至源”无主用链路
我使用正则表达式的模块,我试图用这句话
#</?a[^>]*>#iu
但没有成功。请有人可以帮我解决这个问题。
HTML至少是一种上下文无关语言。用正则表达式正确解析CFL是不可能的。因此,这是不可能的。使用适当的HTML解析库,并重新制作DOM树或偶数流(取决于接口),以便适合您想要做的事情。
从本质上讲,你要的是:
<a.*?>(.*?)</a>
这将捕获$ 1的链接文字。 “*?”是一个非贪婪的比赛 - 这意味着这将匹配任何东西,但尽可能少的几次。
为了更加安全,您可能需要接受奇的地方和情况选择一些空间:
<\s*[Aa].*?>(.*?)<\s*/[Aa]\s*>
即使这不是防弹的,但应该处理大多数情况下。
如果您使用“正则表达式”模块而不是“字符串正则表达式”,请不要忘记g和s选项。
HTML是not a regular language和cannot be matched by regular expressions。你可以把一些可能与HTML相匹配的东西放在一起,并且有时会起作用,但是一旦有些奇怪,就会意外失败。
现在,可悲的是,雅虎管道似乎没有包含HTML解析器。但是,根据this blog entry,您可以通过HTML Tidy管道传输数据,然后使用它们的Fetch Data模块,该模块可以解析XML以提取结构化格式的数据。之后用于处理XML的工具并不理想(它们似乎不支持像XPath或CSS选择器查询那样有用的任何东西),但至少您可以使用已由适当解析的结构化格式处理数据HTML解析器。
试试这个:
$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"
'?a[^>] *>'似乎也为我工作。当然,它很弱,它也会删除''等,但它没有散列。你的问题到底是什么?你可以发布管道吗? – Kobi 2009-12-13 11:29:45