php - 预匹配返回空数组
问题描述
我做了下面的预匹配以获得包含频道或生活方式频道或电子竞技频道的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"
}
}
解决方案
尝试(?<!<a[ ]href=")/(?|channels|lifestyle-channels|esports-channels)/[a-z 0-9\-\_]+
一些笔记
- 不能有断言冲突。
(?!B)(?=A)
将永远匹配A
- 删除断言
(?=())
和捕获组。这将导致 match var group 0 具有值。
推荐阅读
- c# - 测试矩形线相交
- javascript - load jquery dropdown before javascript function
- php - 根据数组中的时间区分输出消息
- jquery - How can i get value from span through jQuery?
- javascript - 如何操作来自 React 组件的数据?
- java - Spring休眠mysql日期不匹配
- excel - AVERAGE 使用来自多个列的多个条件
- node.js - 错误:FAILED_PRECONDITION:找不到匹配的索引。推荐指数为:
- html - How to center flexbox sticky footer with a set width
- swift - SKStoreRevieController requestReview() 方法在无法连接到 iTunes 时导致 UI 滞后