Как получить только один специальный символ в строке перед буквой и вставить запятую между ними? - PullRequest
1 голос
/ 25 июня 2019

Я пытаюсь вставить запятую между строк, как hello)))how are you, я просто хочу вставить ее между ) + буквой, я имею в виду hello))),how are you.

Как я могусделать это с помощью регулярных выражений и preg_replace?

Я пытался использовать "/(\)+[a-z]){1}/g", но это занимает все ), а не только первое перед буквой.

Ответы [ 2 ]

1 голос
/ 25 июня 2019

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

$result = preg_replace('~\)+\K(?=[a-z])~', ',', $s);

См. Демоверсию regex .Вариант без учета регистра: '~\)+\K(?=[a-z])~i'.

Подробности

  • \)+ - соответствует 1+ ) символов
  • \K- пропускает сопоставленные ) символы из совпадения
  • (?=[a-z]) - требует строчной буквы справа от текущего местоположения без добавления ее к значению совпадения.

Альтернатива:

$result = preg_replace('~(\)+)([a-z])~', '$1,$2', $s);

См. это демо регулярных выражений .Вариант без учета регистра: '~(\)+)([a-z])~i'.

Здесь (\)+)([a-z]) фиксирует закрывающие скобки в группе 1, а затем буква записывается в группе 2, а заменой является значение в группе 1 + , +значение в группе 2.

0 голосов
/ 25 июня 2019

Регулярное выражение:

(\))([^)])

Строка замены:

\1,\2

Тест здесь .


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

(\))([a-zA-Z])
...