PHP ungreedy不匹配任何东西

时间:2016-06-26 10:14:52

标签: php preg-match

网站上有类似的内容:

<html ... data-props="{some_json_data_with_html_entities}" ...>

我正在尝试将JSONpreg_match()联系起来,但是......

使用时:

'~data-props="(.*)"~'

我之后得到了所有的东西...我的意思是该行中有更多的东西包含{​​{1}},所以它抓住了所有的东西......

但使用时:

""

我什么也没得到......结果是空数组。

发生了什么事?我该如何正确匹配?

1 个答案:

答案 0 :(得分:0)

您应该使用JSON解析器,但如果您想知道它为什么不起作用(特别是示例2),那就太神秘了。您希望匹配lazyU修饰符在没有?量词的情况下使用data-props="(.+?)" 。目前还不清楚你的实际PHP代码是什么样的;你的第二个模式应该根据输入字符串进行匹配。

preg_match
  

+? [懒惰]匹配1到∞次,尽可能少,   根据需要扩大。

https://www.regex101.com/r/cL9xU9/1

以下是使用您的第二种模式$str = '<html ... data-props="{some_json_data_with_html_entities}" ... "{some__moar_json_data_with_html_entities}">'; preg_match( '~data-props="(.*)"~U', $str, $res) ; print_r($res[1]); 的快速示例:

{some_json_data_with_html_entities}

<强>结果:

if (Auth::check()) {
    $user_id = Auth::user()->getKey();
}

如果它不匹配,那么你显然在我们获得的字符串中得到了更多。