正则表达式.如何在匹配模式后从结果中排除子字符串

ahm*_*007 6 regex

我想知道如何在匹配模式后从结果中排除子字符串.例:

<a href="?page1"><?php __('string1');?></a>
<a href="?page2"><?php __("string2");?></a>
Run Code Online (Sandbox Code Playgroud)

我想只获得作为参数传递给__()函数的字符串.我试过这个正则表达式:

'/__\(((\'([^\']+)\')|(\"([^\"]+)\"))/'
Run Code Online (Sandbox Code Playgroud)

但是返回'string1'和"string2"包装在单引号和双引号中.
如何排除单引号和双引号?

ste*_*ema 0

尝试这个

'/__\(('|")([^\1]+)\1\)/'
       ^1^  ^^2^^^
Run Code Online (Sandbox Code Playgroud)

您可以在 Regexr 上在线查看它

每次打开圆括号时,都会创建一个捕获组。因此,如果您不想使用它,(?:)则会定义一个非捕获组。我这里不用这个。我稍微重写了你的正则表达式。在我的第一组中,我检查是否有'or"并将它们存储到组 1 中。稍后我使用\1对此组的反向引用,以使用正确的字符。

然后,您的结果将始终存储在组 2 中。访问此结果的方式取决于您使用的语言。