获取括号之间的所有文本但跳过嵌套括号

问题描述 投票:2回答:3

我试图找出如何在两个括号标签之间获取文本,但不要在第一次关闭时停止)

__('This is a (TEST) all of this i want') i dont want any of this;

我目前的模式是__\((.*?)\)

这给了我

__('This is a (TEST) 

但我想要

__('This is a (TEST) all of this i want') 

谢谢

php regex regex-negation
3个回答
0
投票

你忘了在正则表达式中删除两个括号:__\((.*)\);

检查regex101.com


1
投票

__之后,您可以使用正则表达式子例程来匹配嵌套括号内的文本:

if (preg_match_all('~__(\(((?:[^()]++|(?1))*)\))~', $s, $matches)) {
    print_r($matches[2]);
}

regex demo

细节

  • __ - 一个__子串
  • (\(((?:[^()]++|(?1))*)\)) - 第1组(将使用(?1)子例程递归): \( - ( char ((?:[^()]++|(?1))*) - 第2组捕获除()之外的任何1+字符的0次或多次重复或整个第1组模式被递归 \) - ) char。

PHP demo

$s = "__('This is a (TEST) all of this i want') i dont want any of this; __(extract this)";
if (preg_match_all('~__(\(((?:[^()]++|(?1))*)\))~', $s, $matches)) {
    print_r($matches[2]);
}
// => Array ( [0] => 'This is a (TEST) all of this i want'  [1] => extract this )

0
投票

使用模式__\((.*)?\)

\逃脱括号以捕捉字面括号。然后,它会捕获该组括号内的所有文本。

© www.soinside.com 2019 - 2024. All rights reserved.