Уже опубликованные решения с регулярными выражениями - \((.*?)\)
и \(([^\)]+)\)
- не возвращают самые внутренние строки между открытыми и закрытыми скобками. Если строка Text (abc(xyz 123)
они и возвращают(abc(xyz 123)
как весь матч, а не (xyz 123)
.
Шаблон, который соответствует подстрокам (используйте с preg_match
для получения первой и preg_match_all
для выборки всех вхождений) в круглых скобках без других открытых и закрывающих круглых скобок между ними, если совпадение должно включать круглые скобки:
\([^()]*\)
Или вы хотите получить значения без скобок:
\(([^()]*)\)
\(\K[^()]*(?=\))
(?<=\()[^()]*(?=\))
Замените *
на, +
если между (
и должен быть хотя бы 1 символ )
.
Детали :
\(
- открывающая круглая скобка (должна быть экранирована, чтобы обозначить буквальную круглую скобку, поскольку она используется вне класса символов)
[^()]*
- ноль или больше символов , кроме (
и )
(обратите внимание , это (
и )
не должны быть экранированы внутри класса символов , как внутри него, (
и )
не может быть использован для указания группирования и рассматриваются в качестве буквальных скобках)
\)
- закрывающая круглая скобка (должна быть экранирована, чтобы обозначить буквальную круглую скобку, поскольку она используется вне класса символов).
\(\K
Участие в альтернативных матчах регулярных выражений (
и опускают от значения матча (с \K
оператором сброса матча). (?<=\()
- это положительный просмотр назад, который требует, чтобы a (
появлялся сразу слева от текущего местоположения, но (
не добавляется к значению соответствия, поскольку шаблоны просмотра назад (lookaround) не используются. (?=\()
- это положительный просмотр вперед, который требует, чтобы )
символ появлялся сразу справа от текущего местоположения.
Код PHP :
$fullString = 'ignore everything except this (text) and (that (text here))';
if (preg_match_all('~\(([^()]*)\)~', $fullString, $matches)) {
print_r($matches[0]);
print_r($matches[1]);
}
Вывод:
Array ( [0] => (text) [1] => (text here) )
Array ( [0] => text [1] => text here )
s($fullString)->between("(", ")")
полезные сведения, найденные в этой автономной библиотеке .