Удалить первые и последние скобки - PullRequest
0 голосов
/ 14 февраля 2019

Мне нужно взять все тексты между первой и последней скобками, но мне трудно с регулярным выражением.

Что у меня есть, так это до сих пор, и я застрял и не знаю, горячопродолжаем дальше.

/(\w+)\((.*?)\)\s/g)

Но он останавливается на первом ")", который видит.

Пример:

(me)

(mine)

((me) and (you))

Желаемый результат равен

me

mine

(me) and (you)

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

A без регулярных выражений путь с chop() и reverse()

$string='((me) and (you))';
chop($string);
$string = reverse($string);
chop($string); 
$string = reverse($string); 
print $string;

Выход:

(me) and (you)

ДЕМО: http://tpcg.io/MhaLed

0 голосов
/ 14 февраля 2019

Ваш код почти верен, он будет работать, только если вы не добавите?в регулярном выражении, например: (я также удалил пару вещей)

/\w+\((.*)\)/
0 голосов
/ 14 февраля 2019

Так как вы хотите захватить весь текст в скобках, вы не должны использовать не жадный квантификатор.Вы можете использовать это регулярное выражение, которое использует обходные пути и жадную версию .*, которая захватывает весь текст между ( и ).

(?<=\().*(?=\))

Демо

РЕДАКТИРОВАТЬ: Другое альтернативное решение

Другой способ извлечь те же данные можно сделать с помощью следующего регулярного выражения, которое не имеет никакого взгляда вперед / назад, которое не поддерживаетсянекоторые регулярные выражения и могут быть полезны в таких ситуациях.

^\((.*)\)$

Здесь ^\( соответствует стартовой скобке, а затем (.*) использует любой текст исчерпывающим образом и помещается в первый шаблон группировки и останавливается только напоследнее вхождение ) перед концом строки.

Демонстрация без обхода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...