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

正则表达式大括号和引号获取内部文本

  •  0
  • Alex  · 技术社区  · 7 年前

    在以下字符串中 {lang('stmt')} 我只想得到 stmt {lang("stmt")} .

    我不喜欢正则表达式,我试过了 {lang(.*?)} ('stmt') .

    4 回复  |  直到 7 年前
        1
  •  2
  •   The fourth bird    7 年前

    你可能会匹配 {lang(" {lang(' ' " 使用捕获组。此组可与反向引用一起使用,以匹配相同的字符。

    使用 \K

    然后匹配0+个非贪婪字符 .*? \1 断言接下来的是 ')} ")}

    \{lang\((['"])\K.*?(?=\1\)})

    Regex demo

        2
  •  1
  •   CertainPerformance    7 年前

    匹配任意一个 ' " 使用字符集,然后懒洋洋地重复任何字符,直到第一个捕获组可以再次匹配:

    lang\((['"])(.*?)\1
    

    https://regex101.com/r/MBKhX3/1

    在PHP代码中:

    $str = "{lang('stmt')}";
    preg_match('/lang\(([\'"])(.*?)\1/', $str, $matches);
    print(json_encode($matches));
    

    结果:

    ["lang('stmt'","'","stmt"]
    

        3
  •  1
  •   Prashant Deshmukh.....    7 年前

    也试试这个。

        lang\([('")][a-z]*['")]\)
    
        4
  •  0
  •   Manoa Razanajatovo    7 年前

    将(and)保持在(.*)之外,以获取不带(and)的值

    正则表达式: {语言\('|“['|“]\)}

    php:'/{lang\([\'|“](.*?[\'|“]\)}/'