preg_match检索值

詹姆士

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

它具有以下格式:

数据[SearchForm] [此处有些字符串]

而且我需要能够检索“ 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演示

模式匹配

  • \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
}

请参阅此PHP演示

要获得第二个,使用

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

参见另一个PHP演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章