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

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

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

 

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

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

тема: Выделение фразы в тексте
 
 автор: Tema   (12.03.2006 в 16:33)   письмо автору
 
 

Пожалуйста, подскажите как реализовать такую схему:
Есть большая строка(текст), в ней нужно найти подстроку вида: "\nТекст, Еще Один\n"
и выделить ее так Текст, Еще Один. И вернуть исходный текст, но только с выделенными фрагментами.

   
 
 автор: Loki   (12.03.2006 в 16:44)   письмо автору
 
   для: Tema   (12.03.2006 в 16:33)
 


$str=str_replace("\nТекст, Еще Один\n","<b>Текст, Еще Один</b>", $str);

   
 
 автор: Tema   (12.03.2006 в 17:33)   письмо автору
 
   для: Loki   (12.03.2006 в 16:44)
 

Нет. В том то и дело, что эту строку надо найти в исходном тексте. Их там несколько, одного типа.

   
 
 автор: cheops   (12.03.2006 в 19:47)   письмо автору
 
   для: Tema   (12.03.2006 в 17:33)
 

Тогда не понятно, почему вариант, предложенный Loki не подходит... Приведите пожалуйста пример того, что требуется сделать?

   
 
 автор: Tema   (12.03.2006 в 20:53)   письмо автору
 
   для: cheops   (12.03.2006 в 19:47)
 

Ну вот смотрите, есть некий текст, структура:
Имя, Отчество Фамилия
что-то ещевыаыаываыааыаыаыа

Еще одно Имя, Отчество Фамилия
чтоаываываываываыаыаы

и так далее. Это все просто вставляется в форму, как есть. Надо выделить Имя, Отчество Фамилию тегом <b>, а остальное оставить как есть.

   
 
 автор: cheops   (13.03.2006 в 01:35)   письмо автору
 
   для: Tema   (12.03.2006 в 20:53)
 

Хм... а ещё какие-то признаки имеются кроме того, что "Имя, Отчество Фамилия" предшествует два перевода строки? и могут ли два перевода строки встречаться в тексте "ещевыаыаываыааыаыаыа"?

   
 
 автор: Tema   (13.03.2006 в 12:40)   письмо автору
 
   для: cheops   (13.03.2006 в 01:35)
 

Еще есть пустая строка перед "Имя, Отчество Фамилия"
К тому же все три слова начинаются со строчной буквы. Больше, пожалуй, ничего нет :(

   
 
 автор: cheops   (13.03.2006 в 13:52)   письмо автору
 
   для: Tema   (13.03.2006 в 12:40)
 

После имени запятая, а после отчества нет и пробел между ними всегда один?

   
 
 автор: Tema   (13.03.2006 в 16:22)   письмо автору
 
   для: cheops   (13.03.2006 в 13:52)
 

Да. Т.е. получается Var,_Var2_Var3
Слово запятая пробел Слово пробел Слово

   
 
 автор: Trianon   (13.03.2006 в 16:26)   письмо автору
 
   для: Tema   (13.03.2006 в 16:22)
 

и есть гарантия, что такого рода строка не встретится среди этого самого "ещевыаыаываыааыаыаыа"?

василий, васильевич пупкин
решил, что устал

   
 
 автор: Tema   (13.03.2006 в 16:41)   письмо автору
 
   для: Trianon   (13.03.2006 в 16:26)
 

Да есть. Текст в целом схож по структуре.

   
 
 автор: cheops   (14.03.2006 в 00:11)   письмо автору
 
   для: Tema   (13.03.2006 в 16:22)
 

Можно поступить так
<?php 
  $str 
"Имя, Отчество Фамилия
что-то ещевыаыаываыааыаыаыа

Имя, Отчество Фамилия
чтоаываываываываыаыаы"

  
$pattern "|\n([\w]+, [\w]+ [\w]+)|"
  
$str preg_replace($pattern"\n<b>\\1</b>",$str); 
  echo 
$str;
?>

Только первую запись нужно будет отдельно обрабатывать

   
 
 автор: Trianon   (14.03.2006 в 10:41)   письмо автору
 
   для: cheops   (14.03.2006 в 00:11)
 

Я бы, откровенно говоря, ограничил имя фамилию и отчество классом русских букв. Уж больно мало зацепок в фильтре. Но в регекспах слаб еще, поэтому собственного варианта не приведу.

   
 
 автор: Tema   (14.03.2006 в 17:43)   письмо автору
 
   для: cheops   (14.03.2006 в 00:11)
 

Да, то что нужно. Спасибо!

   
 
 автор: Tema   (14.03.2006 в 17:48)   письмо автору
 
   для: Tema   (14.03.2006 в 17:43)
 

Вроде бы как выражение [[:alpha:]] - отвечает за все буквы(регистры) национального алфавита. Т.е. как я понял [A-Za-z] только по-русски.

   
 
 автор: cheops   (14.03.2006 в 22:32)   письмо автору
 
   для: Tema   (14.03.2006 в 17:48)
 

Дело в том, что существует несколько диалектов регулярных выражений [[:alpha:]] - это класс POSIX-регулярных выражений, [\w] - класс Perl-регулярных выражений, но по смыслу они эквивалентны. Однако Perl-регулярные выражения используются в perl_* функциях, а POSIX-регулярные выражения в ereg* функциях.

   
 
 автор: Tema   (15.03.2006 в 16:09)   письмо автору
 
   для: cheops   (14.03.2006 в 22:32)
 

Скажите, а можно ли сделать одновременную проверку, т.е. в одной функции preg_replace() два разных шаблона?

   
 
 автор: cheops   (16.03.2006 в 13:32)   письмо автору
 
   для: Tema   (15.03.2006 в 16:09)
 

Нет, обычно для этого два раза вызывают preg_replace() с разными шаблонами.

   
 
 автор: Tema   (17.03.2006 в 12:31)   письмо автору
 
   для: cheops   (16.03.2006 в 13:32)
 

Скажите пожалуйста, какое рег выражение нужно написать для текста вида : Фамилия И. О.

   
 
 автор: cheops   (17.03.2006 в 12:52)   письмо автору
 
   для: Tema   (17.03.2006 в 12:31)
 

Примерно такое
"|[\w]+ [\w]\. [\w]\.|is"

   
 
 автор: Trianon   (17.03.2006 в 12:52)   письмо автору
 
   для: Tema   (17.03.2006 в 12:31)
 

$str = "===Фамилия И.О.===";
$pattern = "|([\w]+ [\w]\.[\w]\.)|";
$str = preg_replace($pattern, "<i>\\1</i>",$str);
echo $str;

   
 
 автор: Tema   (17.03.2006 в 13:52)   письмо автору
 
   для: Trianon   (17.03.2006 в 12:52)
 

А можно ли сделать зависимость от регистра, то есть первая буква выражения обязательно строчная?

   
 
 автор: cheops   (17.03.2006 в 23:00)   письмо автору
 
   для: Tema   (17.03.2006 в 13:52)
 

Да можно
<?php
  $str 
"===Фамилия И.О.==="
  
$pattern "|([А-ЯЁ]+ [\w]\.[\w]\.)|"
  
$str preg_replace($pattern"<i>\\1</i>",$str); 
  echo 
$str;
?>

   
 
 автор: ZC   (12.03.2006 в 21:27)   письмо автору
 
   для: Tema   (12.03.2006 в 16:33)
 

Если я правильно понял, то можно занести содержимое страницы в буфер, потом заменить текст на странице, добавив туда тэги <b> и вывести в браузер клиента.

   
 
 автор: Tema   (13.03.2006 в 12:42)   письмо автору
 
   для: ZC   (12.03.2006 в 21:27)
 

Сам текст, после обработки, записывается в файл.

   
Rambler's Top100
вверх

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