首页 > 解决方案 > 将数组中的所有 url 路径与 preg_match_all 匹配

问题描述

我有我的正则表达式

\["([^_]+)"\]

\[- 匹配一个“[”字符

"- 匹配一个 """ 字符

[^_]- 将多个标记组合在一起并创建一个捕获组以提取子字符串或使用反向引用。

^ 匹配任何不在集合中的字符。

+ 匹配 1 个或多个前面的标记。

这是简单的工作

["Infant", "Kids", "Newborn", "Småbarn", "adult", "kids"]

但不适用于 url 集

["http://www.elodiedetails.com/storage/01C91C41AFB1E9E491CCB750D86948330B2EFFA95C33849C0127E5557380AF8B/b1e48c712dd94cc2b91d2ced7e40f7c6/jpg/media/245df3634bd045b4bbf7bdb003e5ab1b/zip_go-desert-weaves-elodie-details_50610135582NA_3_1000px.jpg", "http://www.elodiedetails.com/storage/FEFED8E72F7F2B4B1D546FBB8D10A7298C963A1F141EA55EFABA5B29B316D924/877cb34feaaf4560967081ef63716b09/jpg/media/08db7d4521704b35866b10b5f445cd5b/store-my-stuff-wild-paris-elodie-details-SS20-lifestyle_70650128580NA_web.jpg"]

我要尝试从在线正则表达式返回结果的示例

但是这个表达式为我抛出了语法错误

    preg_match_all('/\["([^]+)"\]/', $t, $matches);

如何也需要更改匹配 utrls 的正则表达式?

标签: phpjsonregex

解决方案


你可以用正则表达式来做到这一点,但你为什么要这样做,正如@user4642212 所说,这看起来像一个 json 字符串。可以通过json_decode解析。

在正则表达式中,您只需查找"then 之外的所有内容,然后"再查找". 但要小心,这个正则表达式不会处理这样的转义引号\"

// the "hard" way
preg_match_all('/"([^"]+)"/', $string, $matches);
var_dump($matches[1]);

// the easy way
var_dump(json_decode($string));

工作示例

专业提示:使用 regexr 时,请将其设置为 PCRE(右上角)。这就是php使用的。

在此处输入图像描述


推荐阅读