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


Regexp: |(OR) condition doesn't work

无法找出regexp中的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);

regexp似乎是正确的,但它找不到我所期望的字符串Cherry Credits.jpg。怎么了?

您已经使用行首和行尾锚^$编写了表达式。

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

您可以移除线锚:

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

或者,您可以将后面的.*(可能还有前面的.*)移动到捕获组之外:

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

您需要删除末尾的"$"符号,因为它需要行尾。

试试这个:

^(.*'<li'>'<a href'=).*(cherry|credits)('.jpg)

你可以使用像这个网站这样的在线测试人员:https://regex101.com/并检查是否正常。