Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: поменять местами слова в строке
 
 автор: alexan   (15.11.2012 в 13:02)   письмо автору
 
 

Здравствуйте друзья.
Весь интернет обыскал и не нашел ответ на такой вопрос - как поменять местами слова в строке с помощью регулярки. К примеру есть текст - "Мне приходится постоянно искать и находить, но это все труднее и тяжелее с каждым днем."
Так вот какую регулярку надо написать, чтобы получилось - "Мне приходится постоянно находить и искать, но это все тяжелее и труднее с каждым днем."
Я делал примерно так - разбивал строку на слова, по пробелам, с помощью "explode" затем находил ячейку с суффиксом "и", затем менял местами то что перед ней, на то что за ней (и соответственно наоборот), потом склеивал строку и т.д. но не всегда получается ровно, вот например в этом фрагменте есть запятая и она должна остаться на месте, чтобы не нарушалась орфография. Да и потом мой способ очень ненадежный. Может можно без разбива строки на слова это сделать? Регуляркой отсекать слово что перед "и" до пробела и соответственно после, затем менять их местами... Ну или как то по другому, помогите пожалуйста горе программисту!

  Ответить  
 
 автор: Sfinks   (15.11.2012 в 13:34)   письмо автору
 
   для: alexan   (15.11.2012 в 13:02)
 

<?php
  $s 
'Мне приходится постоянно искать и находить, но это все труднее и тяжелее с каждым днем.';
  
$p '#([а-яё]+) и ([а-яё]+)#ui';
  
$r '$2 и $1';
  
$s preg_replace($p,$r,$s);
  echo 
$s;
?>
если кодировка текста не utf8 - заменить #ui на #i

  Ответить  
 
 автор: alexan   (15.11.2012 в 19:15)   письмо автору
 
   для: 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;
  } 
?>

Извините, что так написал, просто сразу не могу сориентироваться как тут условие написать, у меня то топорный скрипт..
Если к примеру замена должна быть в начале слова - "Мутный и серый лес", сначала уводить все в нижний регистр, а потом первое слово предложения писать с большой буквы?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования