匹配<link />中的两个可能的rel值

时间:2014-09-01 12:53:09

标签: php preg-match

我目前正在使用以下代码解析webmention端点。这适用于<link rel="webmention" href=" "><link rel="http://webmention.org/" href=" ">,但如果两者都包括在内,则无效,即<link rel="webmention http://webmention.org/" href=" ">。我正在努力使其适应这一点。目前的代码:

if(preg_match('/<(?:link|a)[ ]+href="([^"]+)"[ ]+rel="webmention"[ ]*\/?>/i', $body, $match)
  || preg_match('/<(?:link|a)[ ]+rel="webmention"[ ]+href="([^"]+)"[ ]*\/?>/i', $body, $match)) {
    $endpoint = $match[1];
} elseif(preg_match('/<(?:link|a)[ ]+href="([^"]+)"[ ]+rel="http:\/\/webmention\.org\/?"[ ]*\/?>/i', $body, $match)
  || preg_match('/<(?:link|a)[ ]+rel="http:\/\/webmention\.org\/?"[ ]+href="([^"]+)"[ ]*\/?>/i', $body, $match)) {
    $endpoint = $match[1];
}

任何想法?

1 个答案:

答案 0 :(得分:1)

我刚刚写了这篇文章,看看你是否觉得它很有用

'/\<link.+?rel=["']?(?:webmention|http\:\/\/webmention\.org\/?)['"]?.*?\>/g'

DEMO

P.S。:一句忠告 - 你使用正则表达式,就像它们什么都不是。只有在没有其他方法的情况下才应该使用正则表达式,特别是如果$body是一个大字符串,那么你真的不应该运行那么多preg_match。干杯!