Regexp:|(OR)条件不起作用

时间:2016-05-02 18:52:00

标签: php regex

无法弄清楚为什么我的正则表达式中的OR条件无效。

    $str = "                            <li><a href=\"\" class=\"gateway-image\"><img src=\"<?=theme_url()?>/images/Cherry Credits.jpg\" alt=\"\"/></a></li>
                        <li><a href=\"\" class=\"gateway-image\"><img src=\"<?=theme_url()?>/images/gudangvoucher.jpeg\" alt=\"\" style=\"width: 140px!important\"/></a></li>";

    $regexp = '/^(.*\<li\>\<a href\=)(.*cherry|credits.*)$/im';
    preg_match($regexp, $str, $m);

似乎正则表达式是正确的,但它找不到我预期的字符串Cherry Credits.jpg。有什么问题?

2 个答案:

答案 0 :(得分:0)

您已使用行尾^$编写了表达式。

这不匹配,因为您的字符串会在cherry 之后继续,并且 href=credits之间还有其他字符。

您可以删除线锚:

(.*\<li\>\<a href\=)(.*cherry|credits.*)

或者您可以在捕获组之外移动尾随.*(可能还有前导.*):

^(.*\<li\>\<a href\=).*(cherry|credits).*$

答案 1 :(得分:0)

您需要在结尾处删除“$”符号,因为它会预期行尾。

试试这个:

calc

您可以使用此网站的在线测试人员:https://regex101.com/并检查您是否正常。