preg_match检索值

时间:2018-07-13 11:50:39

标签: php preg-match

我正在将preg_match与PHP 5.6结合使用,以从字符串中检索值。 (我是preg_match的新手)

它具有以下格式:

  

数据[SearchForm] [此处是一些字符串]

我需要能够检索“ somestringhere”值。

我尝试过这种方式:

$search_field_pattern   = "/\bdata[SearchForm][[a-zA-Z]]\b/i";
if(preg_match($search_field_pattern, "foo")) {
    debug('foobar!');
}

但是它不起作用。 有人可以给我提示为什么它不起作用以及我应该怎么做才能正确地解决此问题吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用

$search_field_pattern  = "/\bdata\[SearchForm]\[(\w+)]/i";
if(preg_match($search_field_pattern, "data[SearchForm][somestringhere]", $m)) {
    echo $m[1]; // => somestringhere
}

请参见PHP demo

模式匹配

  • \b-单词边界
  • data\[SearchForm]\[-文字字符串data[SearchForm][(注释[被转义以匹配文字[字符)
  • (\w+)-捕获第1组:一个或多个单词字符
  • ]-一个]字符。

preg_match的第三个参数$m将保存结果。由于必需的子字符串已捕获到组1中,因此使用$m[1]来检索值。


要获取方括号内的最后一个子字符串,可以使用

if(preg_match("~\[(\w+)](?!.*\[\w+])~s", "data[SearchForm][somestringhere]", $m)) {
    echo $m[1]; // => somestringhere
}

请参见this PHP demo

要获取第二个,请使用

if(preg_match("~\[\w+].*?\[(\w+)]~s", "data[SearchForm][somestringhere]", $m)) {
    echo $m[1]; // => somestringhere
}

请参见yet another PHP demo