在下面的字符串{lang('stmt')}
中,我只想获取stmt
,在其中也可能如下所示。{lang("stmt")}
。
我对正则表达式不好,我尝试过{lang(.*?)}
,它给了我('stmt')
。
答案 0 :(得分:2)
您可以匹配{lang("
或{lang('
并使用捕获组捕获'
或"
。该组可以与反向引用一起使用以匹配相同的字符。
使用\K
来忘记先前匹配的内容。
然后匹配0个以上的非贪婪字符.*?
,并使用向后引用\1
进行正向超前来断言')}
或")}
\{lang\((['"])\K.*?(?=\1\)})
答案 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 \([\'|“](。*?)[\'|”] \)} /'