У меня есть строка в формате:
"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';