php - 如何匹配 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 中,我不确定是否存在与我上面所拥有的等价物。有没有人有什么建议?
解决方案
在我看来,您希望验证合格的 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
推荐阅读
- javascript - 如何在 CSS 中自动将 div 大小调整为其中的图像大小?
- javascript - 使用 Mongoose 从 MongoDB 中的对象中删除元素
- javascript - 如何创建阿拉伯键盘的脚本?
- azure - Azure 函数 - local.settings.json 与 launchSettings.json
- serenity-platform - 我在 Endpoint 中收到 system.string 值错误?
- php - PHPMailer 接受原始文件名作为附件,但不作为变量
- r - 嵌套类实例 (OOP) 上的 R 方法
- swift - Firestore - 如何将多个字段查询到单个数组
- angular - 在 Angular 中手动重新渲染 FusionChart
- javascript - 尽管我的 firebase 代码 100% 正确(反应),但我的状态仍然为空