无法找出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/并检查是否正常。