我有以下字符串
(...)
api_images = ['/files/a.jpg','/files/avd.jpg','/files/5.jpg'];
api_titles = 3;
api_descriptions = 42;
我需要一个正则表达式从大括号[]
中提取值,如下所示:
/files/a.jpg
/files/avd.jpg
/files/5.jpg
字符串很长,并且可以包含很少的数组,因此正则表达式必须与单词api_images
匹配,并在大括号之间进行搜索。
请帮忙。
答案 0 :(得分:0)
由于PCRE不支持variable-length look-behind,我认为你应该两次通过;首先找到这些“数组”,然后提取字符串。
查找数组并不太难(这是原始正则表达式,根据需要进行转义):
\[(?:[^\]\['"]+|'[^']*'|"[^"]*")*\]
这将为您提供如下匹配的数组:
['/files/a.jpg','/files/avd.jpg','/files/5.jpg']
然后可以使用JSON解析器或使用另一个正则表达式来查找/提取字符串,从而很好地解析:
(?<=')[^']+(?=')|(?<=")[^"]+(?=")
这将为您提供字符串值。注意:这些正则表达式不考虑字符串中的转义(例如,'that\'s a problem'
无法正确解析)。
答案 1 :(得分:0)
如果从多行文本中,您想要获取以api_images
开头的行并忽略所有其他行,则可以使用此行。
<强>流量:强>
api_images
开头的所有行,直到行尾。,
。代码:
<?php
$str = "api_images = ['/files/a.jpg','/files/b.jpg','/files/c.jpg'];
api_titles = 3;
api_descriptions = 42;
api_images = ['/files/1.jpg','/files/2.jpg','/files/3.jpg'];
api_titles = 3;
api_descriptions = 42;";
//Find all the lines starting with "api_images"
preg_match_all("/(api_images.*)/", $str, $matches);
$api_images = $matches[0];
$count_api_images = count($api_images);
for($i=0;$i<$count_api_images;$i++){
$api_images[$i] = str_replace("api_images = [", "", $api_images[$i]);
$api_images[$i] = str_replace("'", "", $api_images[$i]);
$api_images[$i] = str_replace("]", "", $api_images[$i]);
$api_images[$i] = str_replace(";", "", $api_images[$i]);
$api_images[$i] = explode(",", $api_images[$i]);
}
echo "<pre>";
print_r($api_images);
echo "</pre>";
&GT;
/files/a.jpg
,/files/avd.jpg
,/files/5.jpg
等可以访问每个字符串,即$api_images[0][0]
,$api_images[0][1]
$api_images[0][2]
等。< / p>