【问题标题】:get content from string php regex从字符串 php 正则表达式获取内容
【发布时间】:2016-02-24 22:17:52
【问题描述】:

我有下一个字符串:

$string = '["["123456","NAME","1","INFORMATION","15/12/2015","","","0","OTHER ATTRIBUTE","",""]","["["123", "OTHER"]"';

我想提取双引号之间的字母数字信息,我试过这个答案

Regex to get content between single and double quotes php

但输出是这样的,

[0]=> array(12) { [0]=> string(3) ""["" [1]=> string(3) "","" [2]=> string(3) "","" [3]=> string(3) "","" [4]=> string(3) "","" [5]=> string(3) "","" [6]=> string(3) "","" [7]=> string(3) "","" [8]=> string(3) "","" [9]=> string(3) "","" [10]=> string(3) "","" [11]=> string(3) ""]"" } [1]=> array(12) { [0]=> string(1) """ [1]=> string(1) """ [2]=> string(1) """ [3]=> string(1) """ [4]=> string(1) """ [5]=> string(1) """ [6]=> string(1) """ [7]=> string(1) """ [8]=> string(1) """ [9]=> string(1) """ [10]=> string(1) """ [11]=> string(1) """ } [2]=> array(12) { [0]=> string(1) "[" [1]=> string(1) "," [2]=> string(1) "," [3]=> string(1) "," [4]=> string(1) "," [5]=> string(1) "," [6]=> string(1) "," [7]=> string(1) "," [8]=> string(1) "," [9]=> string(1) "," [10]=> string(1) "," [11]=> string(1) "]" }

我怎样才能做到这一点?

【问题讨论】:

    标签: php regex


    【解决方案1】:

    您的输入 "["123456"... 与 link you mentioned 不同。而且这里没有单引号。

    一个想法是要求\w word character 在模式中至少有一个[A-Za-z0-9_]

    if(preg_match_all('/"([^"]*?\w[^"]*)"/', $string, $out) > 0)
      print_r($out[1]);
    
    • [^"]* 匹配任意数量的字符,即not "* 之后的 ? 变为 lazy
    • $1 中查找第一个capture group(括号括起来的组)捕获的匹配项。

    See demo and more explanation at regex101PHP demo at eval.in

    【讨论】:

    • 如何在生成的数组中设置一个只有“”的位置?,我的意思是没有字母数字字符,但必须是一个位置。
    • @JoseRojas 你好!您可以在后面加上? 使该组成为可选组:"([^"]*?\w[^"]*)?" see demo
    【解决方案2】:

    用 preg_match_all 试试这个 regey:

    \"[^\"\,\[\]]+\"
    

    你可以在这里测试它:http://www.phpliveregex.com/p/eKH

    【讨论】:

      猜你喜欢
      • 2011-08-25
      • 2017-05-15
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 2014-09-23
      相关资源
      最近更新 更多