Preg_match_all正则表达式表达式不完全正确

时间:2015-06-12 10:28:12

标签: php arrays regex

我在php中使用Preg_match_all并编写了一个正常运行的正则表达式 正则表达式:'/"([0-9A-z ]*)("|$)/' 要搜索的字符串是:

["100"]
["100","200"]
["100","200","300"]

来自preg的数组

array (
  0 => 
  array (
    0 => '"100"',
    1 => '"200"',
    2 => '"300"',
  ),
  1 => 
  array (
    0 => '100',
    1 => '200',
    2 => '300',
  ),
  2 => 
  array (
    0 => '"',
    1 => '"',
    2 => '"',
  ),
)

所以我从数组1获取数据

但现在我们也得到了以下数据:

[100]
[100,200]

我想要两种类型的单一正则表达式但不能这样做。 我试着写

/"([0-9A-z ]*)("|$)|[0-9]*/

但它没有给出我的预期。 任何人都可以帮助我

还需要做一件事: - 当我使用正则表达式时,Lets说数据如下: -

["",""]

我得到的数组: -

array (
  0 => 
  array (
    0 => '""',
    1 => '""',
  ),
  1 => 
  array (
    0 => '',
    1 => '',
  ),
  2 => 
  array (
    0 => '"',
    1 => '"',
  ),
)

所以从这一点开始我就拿阵列1,所以变空了 但我得到的所有正则表达式都在给我: -

array (
  0 => 
  array (
  ),
)

正则表达式是否能够满足以下所有条件。

3 个答案:

答案 0 :(得分:1)

非正则路径

您可以利用eval method

$string = '["100","200","300"]';
// $string = '[100,200, 300]';
eval('$array = array('.$string.');');
print_r($array);

请参阅IDEONE demo

正则表达方式

根据您的输入,可以有两种方法。

最难的方法是确保我们在[...]内:

(?:\[|(?<!^)\G)"?,?([0-9 ]+)"?,?(?=[^]]*\])

请参阅demo

如果您的输入已经过预先过滤,并且您只获得了如上所示的字符串,则可以使用更高效的正则表达式:

[0-9 ]+(?="?|,)

请参阅demo

答案 1 :(得分:0)

也许在这种情况下简单表达可以帮助你

/([\d]+)/g

DEMO

答案 2 :(得分:0)

您可以使用PHP提供的构建函数,以您希望的方式对其进行简单解码。

使用json_decode

你可以在这里看到实施: - https://ideone.com/IFEe6p

此功能适用于除[] [,,]以外的所有内容 这些类型的字符串应该单独处理。