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

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

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

 

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

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

тема: Исключить из строки последовательность символов
 
 автор: abre2009   (08.01.2009 в 01:50)   письмо автору
 
 

Подскажите, пожалуйста, как указать при помощи regex строку, НЕ содержащую подстроку (то есть последовательность символов)?

Например - найти строки, в которых не содержится последовательность символов abc.

Использовать
[^abc]
не получится - найдет строку, в которой не встречается ни один из перечисленных символов и исключит нужные нам строки bac, cab.

Исходная задача - найти стоящие теги <i>, между которыми бы не встречался закрывающий тег </i>, например соответствует строке

<i><b>Ворона</b> и сыр<i>

  Ответить  
 
 автор: Inviseble_Demon   (08.01.2009 в 04:17)   письмо автору
 
   для: abre2009   (08.01.2009 в 01:50)
 

Ни че не пнял :-))

  Ответить  
 
 автор: abre2009   (08.01.2009 в 09:57)   письмо автору
 
   для: Inviseble_Demon   (08.01.2009 в 04:17)
 

все просто - это вопрос по поиску определенной подстроки в строке при помощи регулярного выражения (язык, на котором все это будет написано не имеет значения, мне важно понять какое регулярное выражение здесь использовать)

так вот ищем строку, в которой НЕТ указанной подстроки

ищем строку, которая начинается и заканчивается тегами <i>, но в которой между ними нет тега </i>

эту строку должен находить:

<i>Маша<i>


а эту не должен находить:

<i>Маша</i><i>

  Ответить  
 
 автор: Trianon   (08.01.2009 в 10:50)   письмо автору
 
   для: abre2009   (08.01.2009 в 09:57)
 

http://ru2.php.net/manual/ru/regexp.reference.php
Читайте раздел "Утверждения". В данном случае нужно использовать отрицающее утверждение.

  Ответить  
 
 автор: abre2009   (08.01.2009 в 12:24)   письмо автору
 
   для: Trianon   (08.01.2009 в 10:50)
 

спасибо, рассматривал данный вариант, тогда не дошло, как можно решить этот вопрос при помощи утверждений, но сейчас начинает проясняться, попробую - напишу о результатах

  Ответить  
 
 автор: abre2009   (08.01.2009 в 12:39)   письмо автору
 
   для: Trianon   (08.01.2009 в 10:50)
 

Большое вам спасибо, получилось так:
<i>(.*?(?<!</i>).*?)<i>

  Ответить  
 
 автор: xx77   (08.01.2009 в 14:31)   письмо автору
 
   для: abre2009   (08.01.2009 в 12:39)
 

можно по разному
<?
header
('content-type: text/plain; charset=windows-1251');

print 
$txt '<i>ccccccc</i>cccccccc
<i>cccccccc<i>cccccccc<i><i>
</i>cccccccc<i><i></i>cccccccc<i>
'
;

//$reg1 = '#<i>(.*?(?<!</i>).*?)<i>#s';
$reg2 '#<i>((?>(?!</i>).[^<]*)*)<i>#s';
$reg3 '#<i>((?:[^<]*(?!</i>).)*)<i>#s';
$reg4 '#<i>((?>(?!</i>).)*)<i>#s';

$reg5 '#<i>((?>[^<]*(?!</?i>).)*)<i>#s';
$reg6 '#<i>((?>(?!</i>).[^<]*)*?)<i>#s';

/*
preg_match_all($reg1, $txt, $a, 2);
print_r( $a ) && print "\n################\n"; 
*/
preg_match_all($reg2$txt$a2);
print_r$a ) && print "\n################\n";

preg_match_all($reg3$txt$a2);
print_r$a ) && print "\n################\n";

preg_match_all($reg4$txt$a2);
print_r$a ) && print "\n################\n\n";

preg_match_all($reg5$txt$a2);
print_r$a ) && print "\n################\n";

preg_match_all($reg6$txt$a2);
print_r$a ) && print "\n################\n";
?>

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

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