[英]Not Another Parse-HTML-With-Regex Question
我在这里阅读了一些有关使用regex解析HTML的问题,并且我理解总体上来说这是一个糟糕的主意。
说了这么多,我有一个非常具体的问题,我认为正则表达式可能是答案。 我一直在摸索尝试找出答案,但是(今天)我对Regex还是陌生的,我希望有一个善良的人可以帮助我。
我有一个始终遵循以下格式的字符串数组
STUFF HERE<a href="somewhere" title="something" target="_blank">name of thing</a>STUFF HERE
我希望实现的只是留下“某处”和“事物名称”,以便我可以仅输出<a href="somewhere">name of thing</a>
。
字符串数组来自我的Facebook个人资料上的链接的RSS提要(如果您碰巧)。
非常感谢您的帮助。
插口
从实用主义的角度来看,我完全理解您的出身。
但是PHP确实有一个非常不错的/简单的HTML解析器 ,并且看起来很简单,要使它起作用,我会毫不犹豫地不推荐它。
我不了解PHP,但是您可以使用以下(极其脆弱的)正则表达式:
<a href="(.+?)" title=".+?" target="_blank">(.+?)</a>
这将捕获URL和链接的文本。
如果您想更加灵活一些,可以允许任何属性,例如:
<a .*?href="(.+?)".*?>(.+?)</a>
$str = 'STUFF HERE<a href="somewhere" title"something" target="_blank">name of thing</a>STUFF HERE';
$success = preg_match('/.*href=\"([^\"]+)\".*>([^<]+)<.*/i', $str, $matches);
if ($success) {
echo $matches[1];
echo $matches[2];
} else {
echo "Parsing failed.";
}
括号子句隔离$ matches数组的匹配部分。 如果模式完全匹配字符串,则$ matches [1]将包含您的href,而$ matches [2]将包含您的链接文本。
在括号内,我用排除字符定义了您感兴趣的那些段的内容。 第一个是[^ \\“] +,它是除双引号以外的任何字符的一个或多个。第二个是[^ <] +,它是除小于号之外的任何字符的一个或多个。这确保了,如果标记的格式始终与您提供的格式一致,则您感兴趣的部分的每一侧都有明确定义的边界。
SLaks regex可能会对除href
之外没有其他属性的URL产生一些问题,这是我的看法:
~<a.+?href="(.+?)".*?>(.+?)</a>~i
我已经用自己的Facebook feed进行了测试,并且可以使用SimpleXML加载它。 好吧,部分。 无法直接加载RSS feed,但是如果首先使用MagPie获取Feed,则可以使用SimpleXml加载description元素,如下所示:
$xml = simplexml_load_string($description); // load description
$link = $xml->xpath('//a'); // find all links inside
$href = (string) $link[0]['href']; // get URL
$text = (string) $link[0]; // and link text
只要Facebook不破坏描述中的HTML,使用SimpleXml是安全的。 如果他们破坏了它,SimpleXml将会抱怨。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.