【问题标题】:Preg_match_all regex expression is not fully correctPreg_match_all 正则表达式不完全正确
【发布时间】:2015-06-12 10:28:11
【问题描述】:

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

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

预置数组

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]*/

但它并没有达到我的预期。 谁能帮我解决这个问题

还需要一件事:- 当我使用正则表达式时,让我们说数据就像:-

["",""]

我得到的数组:-

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

所以我从这里取数组 1 ,所以变空了 但是我得到的所有正则表达式都给了我:-

array (
  0 => 
  array (
  ),
)

一个正则表达式可以给我以下所有条件吗?

【问题讨论】:

  • 你为什么有A-z?您是否打算也匹配“[] \ ^ _ `”?另一个问题:您的数据是否经过预过滤?是否需要检查[...]内部是否有值?
  • 我想我应该删除它。因为数据中只有数字。它没有经过预过滤,数据可以是这样的 [""] 或 []
  • 你想达到什么目的?可能有比正则表达式更好的方法。
  • 相反,您可以简单地使用 php 的in_array 函数而不是正则表达式
  • 我认为 json_decode 做了我需要的所有事情。

标签: php arrays regex


【解决方案1】:

一种非正则表达式方式

您可以利用eval method

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

IDEONE demo

正则表达式方式

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

最难的方法是确保我们在里面[...]

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

demo

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

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

demo

【讨论】:

  • 嗨,我试过了,但问题是,当我们在 ["100""200"] 之间没有逗号时,一个案件仍在审理中,在这种情况下我该怎么办
  • 如果你使用[0-9 ]+(?="?|,),你会得到这个案例。如果您决定使用 eval 方法,则可以通过 replacing "" with a ",". 来预处理输入
【解决方案2】:

也许简单的表达对你有帮助

/([\d]+)/g

DEMO

【讨论】:

    【解决方案3】:

    您可以使用 PHP 提供的内置函数以您想要的方式简单地对其进行解码。

    使用json_decode

    您可以在此处查看实现:- https://ideone.com/IFEe6p

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多