Как выбрать все вхождения в регулярном выражении PHP

96
03 января 2021, 08:50

Есть строка:

  1. Иванов Иван Иванович - оказываются услуги проживания (2-х местный двухкомнатный Люкс, Основное место), услуги питания (Заказное меню), медицинские услуги (Лечение), услуги, связанные с организацией туристического путешествия; 2. Петров Пётр Петрович - оказываются услуги проживания (2-х местный двухкомнатный Люкс, Дополнительное место), услуги питания (Заказное меню), услуги, связанные с организацией туристического путешествия (без оказания медицинских услуг); 3. Семенов Семён Семёнович - оказываются медицинские услуги (Лечение), услуги, связанные с организацией туристического путешествия (без оказания услуг проживания, услуг питания);

Нужно при помощи регулярного выражения на php убрать текст между ", услуги," и ";". То есть нужно получить строку вида:

  1. Иванов Иван Иванович - оказываются услуги проживания (2-х местный двухкомнатный Люкс, Основное место), услуги питания (Заказное меню), медицинские услуги (Лечение) 2. Петров Пётр Петрович - оказываются услуги проживания (2-х местный двухкомнатный Люкс, Дополнительное место), услуги питания (Заказное меню) 3. Семенов Семён Семёнович - оказываются медицинские услуги (Лечение)

Пишу вот эту регулярку, и выбирается только одно вхождение.

/, услуги,[^)]+;/

Как сделать, чтобы выбирались все случаи в строке? Для удобства - ссылка на https://regex101.com/r/VYmAld/1

Answer 1

Я сделал так:

/, услуги,[^;]+;/

и включил флаг global на том сайте.

В PHP будет:

$str = '1. Иванов Иван Иванович - оказываются услуги проживания (2-х местный двухкомнатный Люкс, Основное место), услуги питания (Заказное меню), медицинские услуги (Лечение), услуги, связанные с организацией туристического путешествия; 2. Петров Пётр Петрович - оказываются услуги проживания (2-х местный двухкомнатный Люкс, Дополнительное место), услуги питания (Заказное меню), услуги, связанные с организацией туристического путешествия (без оказания медицинских услуг); 3. Семенов Семён Семёнович - оказываются медицинские услуги (Лечение), услуги, связанные с организацией туристического путешествия (без оказания услуг проживания, услуг питания);';
$result = preg_replace('/, услуги,[^;]+;/', '', $str);
READ ALSO
Как заменить текст в подключаемом со стороннего сайта js?

Как заменить текст в подключаемом со стороннего сайта js?

Имеется виджет статуса заказов, подключающийся к сайту на WordPress следующим кодом

79
Не работает редирект с передачей данный в сессию

Не работает редирект с передачей данный в сессию

Сам редирект работает и пересылает куда надо только вот данные в сессии не сохраняетНу то есть не работает with()

81
Поиск по MySQL по нескольким словам.

Поиск по MySQL по нескольким словам.

Допустим в БД 2 колонки - name и sname (имя и фамилия)Если я пишу в поле поиска "Владислав", то он найдет все строки, в которых в колонке "имя" есть "Владислав"

104
Удалить и посчитать дубли из массива php

Удалить и посчитать дубли из массива php

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

121