为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
蝴蝶不菲 2023-06-24 15:24:54
我有一个看起来像这样的字符串:"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 中,我不确定是否存在与我上面的内容等效的内容。有没有人有什么建议?
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

在我看来,您希望验证合格的 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


查看完整回答
反对 回复 2023-06-24
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

使用 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) {

  [0]=>

  string(51) "https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg"

}


查看完整回答
反对 回复 2023-06-24
  • 2 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信