2017-01-25 2 views
1

В PHP принято рассматривать строки как неизменные. Иногда необходимо изменить строку «на месте».regex - совместить пустое пространство между любыми символами

Мы идем с дополнительным подходом к созданию массива.

Этот массив должен содержать каждую букву из исходной строки.

Для PHP существует функция (str_split). Одна проблема, она не обрабатывает многобайтовые кодировки достаточно хорошо.

Существует также функция mb_split, которая принимает регулярное выражение как входной параметр для последовательности разделителя. Таким образом,

mb_split('.', '123') 

возвращает ['', '', '', ''].

НО:

mb_split('', '123') 

возвращает [ '123'].

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

Так что для '123' он должен соответствовать

'1~2', '2~3' 

где ~ является фактическим матч. Это так же, как \ b, но ни для чего.

Есть ли регулярное исправление для этого?

+1

У вас есть то, что вам нужно? Это звучит как проблема XY. – chris85

+0

Я делаю работу, где я должен представить самый простой код для группы студентов, готовящихся пройти собеседование по кодированию. Вопрос заключается в разворачивании строк на месте. Существует необходимость в представлении решения с использованием языка PHP. Чтобы продвигать лучшие методы кодирования, мы решили использовать широко используемый подход, чтобы считать строки PHP неизменными. Таким образом, мы не имеем права использовать ограничители символов строки в качестве языковой функции. Мы создаем массив из этой строки и работаем над этим, реверсив его, заменяя элементы, а затем объединяя их с результирующей строкой. Мы не можем использовать сложные решения. – vian

+0

Если он работает как минимум для UTF-8, это уже почти идеальное решение. – vian

ответ

1

Использование

preg_match_all('~\X~u', $s, $arr) 

$arr[0] будет содержать все символы. Модель \Xmatches any Unicode grapheme. Модификатор /u необходим, чтобы заставить regex engine обрабатывать входную строку как строку Unicode и сделать шаблон Unicode известным.

См. PHP dem o.

Смежные вопросы