PHP preg_replace: заменить все дефисы в строке, которые появляются перед последним дефисом с пробелом - PullRequest
1 голос
/ 29 января 2020

Использование preg_replace (или другого параметра PHP): мне нужно заменить все дефисы в строке , которые появляются перед последним дефисом , пробелом.

Пример # 1 результата, который мне нужен:

string = My-Cool-String - 201

result = My Cool String - 201

Пример # 2 результата, который мне нужен:

Примечание. Обратите внимание: этот пример строки содержит только 1 дефис.

string = My Cool String - 201

result = My Cool String - 201

Мой текущий код удаляет ВСЕ дефисы и заменяется пробелом.

$origString = 'My-Cool-String - 201';
$newString = preg_replace("/[^A-Za-z0-9]/", ' ', $origString);

Дополнительный контекст:

In пример строки My Cool String - 201

My Cool String представляет название курорта.

201 представляет номер комнаты.

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

1 Ответ

1 голос
/ 29 января 2020

Вы можете использовать

preg_replace('/-(?=.* -)/', ' ', $origString)

См. PHP demo и regex demo . Чтобы учесть любые пробелы, используйте '/-(?=.*\s-)/' или '/-(?=.*\s-\s)/' (если по обе стороны от дефиса должны быть пробелы).

Подробности

  • - - дефис
  • (?=.* -) - положительный прогноз, требующий - после любых 0+ символов, кроме символов разрыва строки, как можно больше (используйте флаг s после / для совпадать через разрывы строк).
...