Intereting Posts
Объединить два изображения и круглый угол в PHP php preg_replace удалить тысячу разделителей в строке как установить php cookie с истечением срока действия, и если существует файл cookie, как перенаправить пользователя на другую страницу Как отключить параметр CURLOPT_HTTPAUTH в php? Что не так с этим кодом AS3 для связи с файлом PHP? Как запретить пользователю использовать мой сайт? Начиная FOREVER или PM2 как WWW-DATA из скрипта PHP PHP-код для добавления нового места в Google Адреса через API Добавить Эллипсис в разбиении на страницы PHP ErrorException: предупреждение: заголовок может содержать не более одного заголовка, обнаружена новая строка Полоса пользовательского заказа с динамическим количеством Создать программно переменный продукт и два новых атрибута в Woocommerce openssl_pkey_new () throwing errors – Правильная настройка openssl.cnf для php php сохраняет загруженные файлы, так как не ожидается Как написать статью <<< TOC в PHP?

Вернуть первый внешний результат из строки, используя регулярные выражения

У меня есть следующая строка:

"{My {formatted {hi|hello}|formate{hi|hello} } {option 1|option 2|option 3}}"; 

Я хочу найти результат между «{» и «}» скобками.

Также результат должен быть из внешнего слоя, а не {hi|hello} но:

 "My {formatted {hi|hello}|formate{hi|hello} } {option 1|option 2|option 3}" 

/^{(.*)}$/ бы первый и последний { и }

используется через $var = preg_replace('/^{(.*)}$/', '$1', $your_text);

Это особенно можно сделать с помощью базовых операций с строкой, вы можете продвинуть это регулярное выражение к /^[^{]*{(.*)}[^{]*$/ что позволит вам помещать символы перед нужной строкой и после этого. Опять же, это можно сделать с помощью строковых операций, используя substr и strrpos .

Вы можете извлечь самое внешнее содержимое из числа неопределенных уровней вложенных скобок с помощью этого шаблона:

 $pattern = '~{((?>[^{}]++|(?R))+)}~'; 

где (?R) означает повторение всего рисунка . Это рекурсивный подход.
Если вам нужно то же самое использовать в качестве подшаблона в более крупном выражении, вы должны использовать:
({((?>[^{}]++|(?-2))+)}) так как (?-2) является относительной ссылкой на вторую группу захвата слева (первая здесь).

Сведения о шаблоне:

  ( # first capturing group { # literal { ( # second capturing group (what you are looking for) (?> # atomic group [^{}]++ # all characters except { and }, one or more time | # OR (?-2) # repeat the first capturing group (second on the left) )+ # close the atomic group, repeated 1 or more time ) # close the second capturing group } # literal } ) # close the first capturing group 

Я думаю, вы можете использовать split Function.E, тогда вы можете использовать Replace .

http://php.net/manual/pt_BR/function.split.php