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

标签 php regex

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

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

我想修改它以便 <li.*?>排除单词 Unplayed . (这个词出现在 .*? 之后和 > 之前。

编辑:

Want to catch: <a href="http://gamercard.xbox.com/en-US/Stallion83.card" rel="noreferrer noopener nofollow">http://gamercard.xbox.com/en-US/Stallion83.card</a>

            <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: <a href="http://gamercard.xbox.com/en-US/test.card" rel="noreferrer noopener nofollow">http://gamercard.xbox.com/en-US/test.card</a>

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

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

谢谢。

最佳答案

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

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

编辑:我无法从您的示例中看出,但听起来 unplayed 可能出现在

  • 的 begin 标记的外部和内部。

  • 关于PHP:正则表达式匹配短语不包含特定单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6477865/

    相关文章:

    regex - 如何使用 Bash 从 JSON 字符串中删除\n 和\r?

    javascript - 语法错误 : Invalid regular expression: missing/

    .net - RegEx 删除除 CR 或 LF 之外的所有控制/不可见字符

    php - 学说一对一关系映射

    php - PHP 脚手架

    PHP通过远程调用获取页面内容

    javascript - 我可以只使用 jQuery 验证还是需要 PHP?

    php - 如何在 ubuntu 中调用 cronjob 文件

    php - 任何更快、更简单的 php preg_match 替代品

    regex - awk 数据匹配不起作用正则表达式 + 日期函数