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

如何将php中包含https url的字符串与固定数量的字母数字字符相匹配?,php,regex,Php,Regex,我有一个字符串,看起来像: "res":"https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg" 我的bash正则表达式是(如果我们让上面的值等于$str): 它可以清晰地提取https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg 在PHP中,我不确定是否存在与上述内容相同的内容。有人有什么建议吗?您只需避开正则表达式中的所有/和,就可以了。我还删除了接近尾

我有一个字符串,看起来像:

"res":"https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg"
我的bash正则表达式是(如果我们让上面的值等于
$str
):

它可以清晰地提取
https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg


在PHP中,我不确定是否存在与上述内容相同的内容。有人有什么建议吗?

您只需避开正则表达式中的所有
/
,就可以了。我还删除了接近尾端的一个点

my\.site\.com\/image\/I\/[[:alnum:]]{11}_[a-zA-Z0-9_]*_\.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) {
  [0]=>
  string(51) "https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg"
}

在我看来,您希望验证符合条件的url是否用双引号括起来,并在前面加上
“res”:
然后您只想提取该url

开始时的向后看和结束时的向前看将验证准确的完整字符串

点必须转义才能作为字符串文字处理

你的下划线前有一个额外的点,我相信你不想保留

如果使用非斜杠字符作为模式分隔符,则不需要转义正斜杠(我将使用
~

[a-zA-Z0-9.]
更简洁地写为
\w

代码:()


在PHP中也是如此。
array(1) {
  [0]=>
  string(51) "https://my.site.com/image/I/fj23l6j2lgk_AM1200_.jpg"
}
$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