-1

我有以下字符串

(...)

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,并在大括号之间查找。

请帮忙。

4

2 回答 2

0

由于 PCRE 不支持可变长度后视,我认为您应该分两遍执行此操作;首先找到这些“数组”,然后提取字符串。

找到数组并不难(这是原始的正则表达式,根据需要转义):

\[(?:[^\]\['"]+|'[^']*'|"[^"]*")*\]

这将为您提供匹配的数组,如下所示:

['/files/a.jpg','/files/avd.jpg','/files/5.jpg']

然后可以使用 JSON 解析器很好地解析它,或者使用另一个正则表达式来查找/提取字符串:

(?<=')[^']+(?=')|(?<=")[^"]+(?=")

这将为您提供字符串值。注意:这些正则表达式不考虑字符串中的转义(例如'that\'s a problem'不会被正确解析)。

于 2012-08-04T10:17:48.297 回答
0

如果您想从多行文本中获取以开头的行api_images并忽略所有其他行,则可以使用它。

流动:

  1. 获取从开始api_images到行尾的所有行。
  2. 删除不需要的字符。
  3. 在 处拆分字符串,
  4. 根据需要处理。

代码:

<?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>";

?>

每个字符串 ie等都可以通过/files/a.jpg,等访问。/files/avd.jpg /files/5.jpg$api_images[0][0]$api_images[0][1]$api_images[0][2]

现场演示

于 2012-08-04T10:22:27.610 回答