Вы можете использовать подпрограмму регулярного выражения для сопоставления текста во вложенных скобках после __
:
if (preg_match_all('~__(\(((?:[^()]++|(?1))*)\))~', $s, $matches)) {
print_r($matches[2]);
}
См. Демоверсию regex .
Подробнее
__
- подстрока __
(\(((?:[^()]++|(?1))*)\))
- Группа 1 (она будет повторяться с использованием подпрограммы (?1)
):
\(
- (
char
((?:[^()]++|(?1))*)
- Группа 2 захватывает 0 или более повторений любых 1+ символов, отличных от (
и )
, или весь шаблон Группы 1 повторяется
\)
- )
char.
См. Демонстрационную версию PHP :
$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 )