nechin
@nechin
web backend developer

Как улучшить регулярное выражение?

Приветствую.

Помогите улучшить регулярное выражение.
$selector = '.class li.class .class.class div.class2.class3 .class3.class4.class5';
$selector = preg_replace("/(\.{1})(\S+)\.+/", "$1$2,.", $selector);

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

Если брать пример выше, то результат должен быть таким:
$selector = '.class li.class .class,.class div.class2,.class3 .class3,.class4,.class5';


У меня проблема в том, что когда точек, удовлетворяющих условию к замене, несколько в одной последовательности, то заменяется только последняя.

Спасибо.
  • Вопрос задан
  • 2285 просмотров
Решения вопроса 1
He11ion
@He11ion
PHP-monkey
$str = ".class li.class .class.class div.class2.class3 .class3.class4.class5";
$result = preg_replace("/(?<=\\.)([^\\.\\s]*)(\\.)/", "$1,$2", $str);

Так, наверное.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
BOOMER_74
@BOOMER_74
Full-Stack разработчик
Используйте модификатор g:
$selector = preg_replace("/(\.{1})(\S+)\.+/g", "$1$2,.", $selector);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы