代码之家  ›  专栏  ›  技术社区  ›  James

preg_匹配以检索值

  •  2
  • James  · 技术社区  · 6 年前

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

    它采用这种格式:

    数据[搜索表单][某些字符串]

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

    我试着这样做:

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

    但没用。 有人能给我一个提示为什么它不起作用,我应该怎么做才能正确地解决这个问题?

    谢谢您。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Wiktor Stribiżew    6 年前

    你可以用

    $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 是的。