Intereting Posts
Получить полный URL-адрес в PHP mysqli :: mysqli (): (HY000 / 2002): Не удается подключиться к локальному серверу MySQL через сокет «MySQL» (2) Удаление акцентов без использования iconv хранить несколько опций выбора в массиве PHP Как найти тег объекта с параметром и вставить тег внутри HTML с помощью простого html DOM php Вызов функции объекта данных при загрузке (SilverStripe) Magento: генерация URL-адреса для бэкэнд-действия (с ключом) Проверка того, что mysql_query вернула что-либо или нет Сравните данную дату с сегодняшним днем PHP LDAP Получить информацию о пользователе члена, который является членом группы Почему и как вы используете Исключения в этом примере кода PHP? Как «установить SQL_BIG_SELECTS = 1» в Laravel Join statement Как сделать аутентификацию с помощью SOAP? Как интегрировать PHP / Python Interpreter в Notepad ++ Выбор значений атрибутов на основе другого значения атрибута с помощью SimpleXML

Найти подстроки в строке, где подстрока, инкапсулированная определенным символом

У меня есть строка в формате:

"The quick __grey__ fox jumps over the lazy __brown__ dog." 

И я хочу найти и заменить любые слова (или иногда предложения) между двойными подчеркиваниями.

В настоящее время я использую preg_match_all в PHP:

 $pattern = '/__(.*)__/'; 

Это прекрасно работает … пока он не найдет два набора двойных подчеркиваний в одной строке, например, в приведенном выше примере, где он соответствует «__grey__» и «__brown__», как я хочу, но также «__grey__ лиса прыгает через ленивый brown__ », чего я не хочу …

Таким образом, мой вопрос заключается в способе сопоставления только между первым и вторым экземпляром, третьим и четвертым экземплярами и т. Д.?

Приносим извинения, если это было задано раньше, но я действительно не уверен, как сформулировать этот вопрос достаточно лаконично, чтобы выполнить полезный поиск!

Заранее спасибо.

Чтобы найти некоторую подстроку между двумя ближайшими идентичными разделителями, используйте lazy dot matching:

 $pattern = '/__(.*?)__/'; 

См. Демонстрацию

Чтобы также совместить новые строки, используйте модификатор /s :

 $pattern = '/__(.*?)__/s';