繁体   English   中英

PHP:正则表达式匹配短语不包含特定单词

[英]PHP: regex match phrase not containing specific word

我已经厌倦了寻找足够接近的例子,花时间寻求一些快速帮助! 这是我的代码:

preg_match_all( '#<li.*?>.*?</li>#s', $card_html, $activity );

我想对其进行修改,以使<li.*?>排除单词Unplayed (单词在.*?之后,在>之前。

编辑

Want to catch: http://gamercard.xbox.com/en-US/Stallion83.card

            <li >

                <a href="http://live.xbox.com/en-us/GameCenter/Achievements?title=1464993792&amp;compareTo=Stallion83">
                   <img src="http://tiles.xbox.com/tiles/vD/fP/1Gdsb2JhbA9ECgUPGgIfVl9TL2ljb24vMC84MDAwIAAAAAAAAPvgN6M=.jpg" alt="F.E.A.R. 3" title="F.E.A.R. 3" />
                   <span class="Title">F.E.A.R. 3</span>
                   <span class="LastPlayed">6/24/2011</span>
                   <span class="EarnedGamerscore">415</span>
                   <span class="AvailableGamerscore">1000</span>
                   <span class="EarnedAchievements">23</span>
                   <span class="AvailableAchievements">50</span>
                   <span class="PercentageComplete">46%</span>
                </a>
            </li>

            <li class="Complete" >

                <a href="http://live.xbox.com/en-US/GameCenter/Achievements?title=1096157212&amp;compareTo=Im%20RedJ">
                   <img src="http://tiles.xbox.com/tiles/HI/L4/1Gdsb2JhbA9ECgQJGgYfVl4gL2ljb24vMC84MDAwIAAAAAAAAPvXggM=.jpg" alt="Call of Duty: WaW" title="Call of Duty: WaW" />
                   <span class="Title">Call of Duty: WaW</span>
                   <span class="LastPlayed">6/21/2011</span>
                   <span class="EarnedGamerscore">1500</span>
                   <span class="AvailableGamerscore">1500</span>
                   <span class="EarnedAchievements">66</span>
                   <span class="AvailableAchievements">66</span>
                   <span class="PercentageComplete">100%</span>
                </a>
            </li>

Dont want: http://gamercard.xbox.com/en-US/test.card

            <li class="Unplayed"></li>

            <li class="Unplayed"></li>

谢谢。

尝试这个。 前瞻确保<li>标记的其余部分不包含“未播放”。

preg_match_all( '#<li(?=(.(?!Unplayed))*?>).*?>(.(?!Unplayed))*?</li>#s', $card_html, $activity ); 

编辑:我无法从您的示例中看出来,但是听起来<li>的begin标签的内部和外部都可能出现未播放的情况。

正则表达式不是执行此任务的正确工具,您可以在SO上看到很多对此的解释。 像这样使用DOMDocument:

function innerHTML($node){
  $doc = new DOMDocument();
  foreach ($node->childNodes as $child)
    $doc->appendChild($doc->importNode($child, true));   
  return $doc->saveHTML();
}
$dom = new DOMDocument();
$dom->loadHTML($content);
// To hold all your liv...
$lis = array();
// Get all li nodes
$liNodes = $dom->getElementsByTagName("li");
foreach($liNodes as $liNode) {
  // Check the class attr of each li
  $cl = $liNode->getAttribute("class");
  if ($cl != "Unplayed")
       $lis[] = innerHTML($liNode);
}
print_r($lis);

以上输入html的输出:

Array
(
    [0] => 
                <a href="http://live.xbox.com/en-us/GameCenter/Achievements?title=1464993792&amp;compareTo=Stallion83">
                   <img src="http://tiles.xbox.com/tiles/vD/fP/1Gdsb2JhbA9ECgUPGgIfVl9TL2ljb24vMC84MDAwIAAAAAAAAPvgN6M=.jpg" alt="F.E.A.R. 3" title="F.E.A.R. 3"><span class="Title">F.E.A.R. 3</span>
                   <span class="LastPlayed">6/24/2011</span>
                   <span class="EarnedGamerscore">415</span>
                   <span class="AvailableGamerscore">1000</span>
                   <span class="EarnedAchievements">23</span>
                   <span class="AvailableAchievements">50</span>
                   <span class="PercentageComplete">46%</span>
                </a>            

    [1] => 
                <a href="http://live.xbox.com/en-US/GameCenter/Achievements?title=1096157212&amp;compareTo=Im%20RedJ">
                   <img src="http://tiles.xbox.com/tiles/HI/L4/1Gdsb2JhbA9ECgQJGgYfVl4gL2ljb24vMC84MDAwIAAAAAAAAPvXggM=.jpg" alt="Call of Duty: WaW" title="Call of Duty: WaW"><span class="Title">Call of Duty: WaW</span>
                   <span class="LastPlayed">6/21/2011</span>
                   <span class="EarnedGamerscore">1500</span>
                   <span class="AvailableGamerscore">1500</span>
                   <span class="EarnedAchievements">66</span>
                   <span class="AvailableAchievements">66</span>
                   <span class="PercentageComplete">100%</span>
                </a> 
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM