【问题标题】:Preg match returning empty array预匹配返回空数组
【发布时间】:2020-05-11 22:06:09
【问题描述】:

我在下面进行了预匹配以获取包含频道或生活方式频道或电子竞技频道的 href,但除了正确的数组之外,它还返回一个空数组。我想我的表达方式有问题

$re = '/(?!<a href=")(?=(\/(?|channels|lifestyle-channels|esports-channels)\/[a-z 0-9-\_]{1,}))/m';

$str = '<div class="thumb-block "><div class="thumb-inside"><div class="thumb"><a href="/video55783515222/12/best_ronaldinho_plays"><img src="lightbox-blank.gif" data-src="12.jpg" data-idcdn="10" /></a></div><span class="video-hd-mark">1080p</span></div><div class="thumb-under"><p class="title"><a href="/video55783515/13/big_tips_12" title="Tips #12">Tips #12</a></p><p class="metadata"><span class="bg"><span class="duration">26 min</span><a href="/channels/tips_12"><span class="name">Tips #12</span></a><span class="text-disabled"> 20 mins ago</span></span></p></div></div>';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result

var_dump($matches);

结果

array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(0) ""
    [1]=>
    string(17) "/channels/tips_12"
  }
}

我想要什么

array(1) {
  [0]=>
  array(1) {
    [0]=>
    string(17) "/channels/tips_12"
  }
}

【问题讨论】:

  • 想做什么?
  • 我认为布鲁诺试图理解为什么一个空字符串在开头匹配。

标签: php regex preg-match preg-match-all


【解决方案1】:

试试(?&lt;!&lt;a[ ]href=")/(?|channels|lifestyle-channels|esports-channels)/[a-z 0-9\-\_]+

一些笔记

  • 不能有冲突的断言。 (?!B)(?=A) 将始终匹配 A
  • 删除断言(?=()) 并捕获组。 这将导致匹配变量组 0 具有值。

【讨论】:

    猜你喜欢
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    相关资源
    最近更新 更多