preg_match 检索值

preg_match to retrieve value

我正在使用 preg_match 和 PHP 5.6 从字符串中检索值。 (我是 preg_match 的新手)

格式如下:

data[SearchForm][somestringhere]

我需要能够检索 'somestringhere' 值。

我试过这样做:

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

但它不起作用。 有人可以提示我为什么它不起作用以及我应该如何正确处理此解决方案?

谢谢。

您可以使用

$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