|
|
|
| Здравствуйте друзья.
Весь интернет обыскал и не нашел ответ на такой вопрос - как поменять местами слова в строке с помощью регулярки. К примеру есть текст - "Мне приходится постоянно искать и находить, но это все труднее и тяжелее с каждым днем."
Так вот какую регулярку надо написать, чтобы получилось - "Мне приходится постоянно находить и искать, но это все тяжелее и труднее с каждым днем."
Я делал примерно так - разбивал строку на слова, по пробелам, с помощью "explode" затем находил ячейку с суффиксом "и", затем менял местами то что перед ней, на то что за ней (и соответственно наоборот), потом склеивал строку и т.д. но не всегда получается ровно, вот например в этом фрагменте есть запятая и она должна остаться на месте, чтобы не нарушалась орфография. Да и потом мой способ очень ненадежный. Может можно без разбива строки на слова это сделать? Регуляркой отсекать слово что перед "и" до пробела и соответственно после, затем менять их местами... Ну или как то по другому, помогите пожалуйста горе программисту! | |
|
|
|
|
|
|
|
для: alexan
(15.11.2012 в 13:02)
| |
<?php
$s = 'Мне приходится постоянно искать и находить, но это все труднее и тяжелее с каждым днем.';
$p = '#([а-яё]+) и ([а-яё]+)#ui';
$r = '$2 и $1';
$s = preg_replace($p,$r,$s);
echo $s;
?>
| если кодировка текста не utf8 - заменить #ui на #i | |
|
|
|
|
|
|
|
для: Sfinks
(15.11.2012 в 13:34)
| | Огромное спасибо, все работает!
А то я уже продолжил свои изыскания с "explode",
Но как это всегда бывает нужно кое-что еще.
К примеру не все слова вокруг "и" можно менять местами - "Был жаркий день и очень хотелось купаться." Тут единственное до чего я додумался отсекать по условию, например по частичному совпадению с корнем-
<?php
$koren = " иска|находи|трудне|тяжеле";
$s = 'Мне приходится постоянно искать и находить, но это все труднее и тяжелее с каждым днем. Был жаркий день и очень хотелось купаться.';
if("1 слово частично совпадает с одним из корней" and "2 слово частично совпадает с одним из корней")
{
$p = '#([а-яё]+) и ([а-яё]+)#ui';
$r = '$2 и $1';
$s = preg_replace($p,$r,$s);
echo $s;
}
?>
|
Извините, что так написал, просто сразу не могу сориентироваться как тут условие написать, у меня то топорный скрипт..
Если к примеру замена должна быть в начале слова - "Мутный и серый лес", сначала уводить все в нижний регистр, а потом первое слово предложения писать с большой буквы? | |
|
|
|