如何匹配 php 中包含具有固定数量的字母数字字符的 https url 的字符串?

我有一个看起来像这样的字符串:

"res":"https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg"

我的 bash 正则表达式是(如果我们让上面等于$str):

echo $str | grep -oE "\"res\":\"https://my.site.com/image/I/[[:alnum:]]{11}._[a-zA-Z0-9_]*_.jpg\"" \
| grep -oE "my.site.com/image/I/[[:alnum:]]{11}._[a-zA-Z0-9_]*_.jpg" | head -1

干净地提取出来https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg

在 PHP 中,我不确定是否存在与我上面的内容等效的内容。有没有人有什么建议?


蝴蝶不菲
浏览 123回答 2
2回答

沧海一幻觉

在我看来,您希望验证合格的 url 是否用双引号括起来并且前面带有"res":,那么您只想提取该 url。开头的后视和结尾的前视将验证确切的完整字符串。必须对点进行转义才能将其视为字符串文字。你的下划线之前有一个额外的点,我不相信你想保留它。~如果您使用非斜杠字符作为模式分隔符(我将使用),则不需要转义正斜杠。[a-zA-Z0-9_]更简洁地写为\w.代码:(演示)$string = '"res":"https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg"';echo preg_match('~(?<=^"res":")https://my\.site\.com/image/I/[a-zA-z\d]{11}_\w*_\.jpg(?="$)~', $string, $out) ? $out[0] : 'no match';输出:https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg

一只甜甜圈

使用 PHP ,您可以通过以下方式选择:$subject = '"res":"https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg"';$regex = '/https:\/\/my\.site\.com\/image\/I\/[[:alnum:]]{11}_[a-zA-Z0-9_]*_.jpg/'preg_match($regex , $subject , $matches);var_dump($matches);输出 :array(1) {&nbsp; [0]=>&nbsp; string(51) "https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg"}
打开App,查看更多内容
随时随地看视频慕课网APP