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

时间:2018-10-30 07:07:38

标签: php regex

在下面的字符串{lang('stmt')}中,我只想获取stmt,在其中也可能如下所示。{lang("stmt")}

我对正则表达式不好,我尝试过{lang(.*?)},它给了我('stmt')

4 个答案:

答案 0 :(得分:2)

您可以匹配{lang("{lang('并使用捕获组捕获'"。该组可以与反向引用一起使用以匹配相同的字符。

使用\K来忘记先前匹配的内容。

然后匹配0个以上的非贪婪字符.*?,并使用向后引用\1进行正向超前来断言')}")}

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

Regex demo

答案 1 :(得分:1)

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

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"]

(所需的字符串将在第二个捕获组中)

答案 2 :(得分:1)

也尝试一下。

    lang\([('")][a-z]*['")]\)

答案 3 :(得分:0)

将(和)保留在(。*)之外,以获取没有(和)的值

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

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