猿问

如何将 javascript regex 转换为 php regex

我想将此 javascript regex 转换为 php regex。我已经测试了代码可以运行。


<img.*?src='(?!http[s]*:\/\/img.[a-zA-Z0-9]*.test\/)(.*?)'


<img alt='' src='http://img.dev.teeeest/images/UID' />

<img alt='' src='https://img.deaaav.test.com/images/UID/' />

<img alt='' src='http://api.com/images/UID' />

<img alt='' src='http://img.deaSassav.test/images/UID' />

<img alt='' src='https://img.dev.test/images/UID' />

它将选择其中的前三个。我希望 php regex 将具有相同的结果。


$body = "<img alt='' src='http://img.dev.teeeest/images/UID' />

<img alt='' src='https://img.deaaav.test.com/images/UID.ux/' />

<img alt='' src='http://api.com/images/UID' />

<img alt='' src='http://img.deaSassav.test/images/UID' />

<img alt='' src='https://img.dev.test/images/UID' />";

$body = stripslashes($body);

$img_array = array();

preg_match_all('/<img[^>]*?src=[\'|\"](http[s]*:\/\/img.[a-zA-Z0-9]*.test\/[^"|^\']*?)[\'|\"][^>]*?>/isU', $body, $img_array);

$img_array = array_unique($img_array[1]);

echo "<pre>";

print_r($img_array);

echo "</pre>";

我使用网站测试https://regex101.com/ 我尝试在 http[s] 之前使用添加 ^。像这样


<img[^>]*?src=[\'|\"](^http[s]*:\/\/img.[a-zA-Z0-9]*.test\/)[^"|^\']*?[\'|\"][^>]*?>

我想否定什么有这个


http[s]*:\/\/img.[a-zA-Z0-9]*.test\/


叮当猫咪
浏览 188回答 2
2回答

蛊毒传说

你的 javascript 正则表达式工作正常;您只需要将s标志更改为m:$body = "<img alt='' src='http://img.dev.teeeest/images/UID' /><img alt='' src='https://img.deaaav.test.com/images/UID.ux/' /><img alt='' src='http://api.com/images/UID' /><img alt='' src='http://img.deaSassav.test/images/UID' /><img alt='' src='https://img.dev.test/images/UID' />";$body = stripslashes($body);$img_array = array();preg_match_all("/<img.*?src='(?!http[s]*:\/\/img.[a-zA-Z0-9]*.test\/)(.*?)/imU", $body, $img_array);echo "<pre>";print_r($img_array[0]);echo "</pre>";输出:<pre>Array(&nbsp; &nbsp; [0] => <img alt='' src='http://img.dev.teeeest/images/UID' />&nbsp; &nbsp; [1] => <img alt='' src='https://img.deaaav.test.com/images/UID.ux/' />&nbsp; &nbsp; [2] => <img alt='' src='http://api.com/images/UID' />)</pre>3v4l.org 上的演示

米脂

这个表达式也可能有效:<img\b.*?\bsrc=['"](?!https?:\/\/img\.[a-z0-9]*\.test\/)([^'"]*)如果你想探索/简化/修改表达式,它已在regex101.com 的右上角面板中进行了&nbsp;解释。如果您愿意,您还可以在此链接中观看它如何与某些示例输入匹配。
随时随地看视频慕课网APP
我要回答