У меня простой текст:
$ text = "БАДРЎ (Й) (ي (بدرو он ки рўи нозебу хунук до- рад, бадафт, безеб, бадбашара; муќоб. Тез-тез зур - зур. ОБАНДОМ آباندام маљ. обпайкар, нозукан- дом, латифбадан. FBAФКАН آبافكن муњаррики обафкан, даст- гоњи обпошї. ";
Здесь я хочу совместить слова и получить этот результат:
БАДРЎ (Й) (ي (بدرو он ки рўи нозебу хунук дорад , бадафт, безеб, бадбашара; музоб. Тез-тез ганда. ОБАНДОМ آباندام маљ. Обпайкар, нозукандом , латифбадан. FBAФКАН آبافكن муњаррики зур – зур обафкан, дастгоњи обпошї.
То есть вам нужно совместить эти слова таким образом:
до- рад до дорад
нозукан- дом к нозукандом
даст- гоњи, чтобы датьгоњи
Я использую этот код для удаления \ r \ n:
$regex = '~-\R~'; $result = preg_replace($regex, '', $string);
И получите только тот результат:
БАДРЎ (Й) (ي (بدرو он ки рўи нозебу хунук дорад , бадафт, безеб, бадбашара, муќоб. Тез-тез зур – зур. ОБАНДОМ آباندام ма., Обпайкар, нозукан- дом, латифбадан. FBAФКАН آبافكن муњаррики обафкан, даст- гоњи обпошї.
Не удалось объединить эти слова:
нозукан- дом к нозукандом
даст- гоњи, чтобы датьгоњи
Я предлагаю использовать
$result = preg_replace('~\b-(?:\R|\h)\b~u', '', $string);
См. Демо-версию regex
Детали
\b
– граница слова (текущей позиции должно предшествовать слово char -
– дефис (?:\R|\h)
– последовательность разрыва строки ( \R
) или ( |
) любого горизонтального пробела ( \h
) \b
– граница слова (должно быть слово char сразу справа от текущего местоположения) Демо-версия PHP :
$string = "БАДРЎ(Й) (ي(بدرو он ки рўи нозебу хунук до- рад, бадафт, безеб, бадбашара; муќоб. Тез-тез зур - зур. ОБАНДОМ آباندام маљ. обпайкар, нозукан- дом, латифбадан. FБАФКАН آبافكن муњаррики обафкан, даст- гоњи обпошї."; $result = preg_replace('~\b-(?:\R|\h)\b~u', '', $string); echo $result;
Вывод:
БАДРЎ(Й) (ي(بدرو он ки рўи нозебу хунук дорад, бадафт, безеб, бадбашара; муќоб. Тез-тез зур - зур. ОБАНДОМ آباندام маљ. обпайкар, нозукандом, латифбадан. FБАФКАН آبافكن муњаррики обафкан, дастгоњи обпошї.
Вам нужно заменить либо \R
либо пробел, и добавить границы слов ( \b
). Наконец, поскольку вы теперь имеете дело со словами, вам нужно добавить флаг u
поэтому движок рассматривает UTF-8.
<?php $text = "БАДРЎ(Й) (ي(بدرو он ки рўи нозебу хунук до- рад, бадафт, безеб, бадбашара; муќоб. Тез-тез зур - зур. ОБАНДОМ آباندام маљ. обпайкар, нозукан- дом, латифбадан. FБАФКАН آبافكن муњаррики обафкан, даст- гоњи обпошї."; $regex = '/\b-(\R| )\b/u'; $result = preg_replace($regex, '', $text); echo $result;
демонстрация
Результат :
БАДРЎ (Й) (ي (بدرو он ки рўи нозебу хунук дорад, бадафт, безеб, бадбашара; музоб. Тез-тез зур – зур ОБЕНДОМ آباندام маљ. Обпайкар, нозукандом, латифбадан. FБАФКАН آبافكن муњаррики обафкан, дастгоњи обпошї.
Попробуйте следующее регулярное выражение:
preg_replace("/((?<![ ])[-][ \r\n]+)/", '', $text)
это будет точно соответствовать этим словам. Демо здесь
Похоже, что пару из них не на концах, не так ли? Поэтому вам может потребоваться также включить:
$regex = '~- ~'; $result = preg_replace($regex, '', $string);
И у меня нет возможности проверить это, но вы могли бы объединить два с
$regex = '~-(\R| )~'; $result = preg_replace($regex, '', $string);