|
|
|
| Подскажите, пожалуйста, как указать при помощи regex строку, НЕ содержащую подстроку (то есть последовательность символов)?
Например - найти строки, в которых не содержится последовательность символов abc.
Использовать не получится - найдет строку, в которой не встречается ни один из перечисленных символов и исключит нужные нам строки bac, cab.
Исходная задача - найти стоящие теги <i>, между которыми бы не встречался закрывающий тег </i>, например соответствует строке
<i><b>Ворона</b> и сыр<i>
|
| |
|
|
|
|
|
|
|
для: abre2009
(08.01.2009 в 01:50)
| | Ни че не пнял :-)) | |
|
|
|
|
|
|
|
для: Inviseble_Demon
(08.01.2009 в 04:17)
| | все просто - это вопрос по поиску определенной подстроки в строке при помощи регулярного выражения (язык, на котором все это будет написано не имеет значения, мне важно понять какое регулярное выражение здесь использовать)
так вот ищем строку, в которой НЕТ указанной подстроки
ищем строку, которая начинается и заканчивается тегами <i>, но в которой между ними нет тега </i>
эту строку должен находить:
а эту не должен находить:
| |
|
|
|
|
|
|
|
для: abre2009
(08.01.2009 в 09:57)
| | http://ru2.php.net/manual/ru/regexp.reference.php
Читайте раздел "Утверждения". В данном случае нужно использовать отрицающее утверждение. | |
|
|
|
|
|
|
|
для: Trianon
(08.01.2009 в 10:50)
| | спасибо, рассматривал данный вариант, тогда не дошло, как можно решить этот вопрос при помощи утверждений, но сейчас начинает проясняться, попробую - напишу о результатах | |
|
|
|
|
|
|
|
для: Trianon
(08.01.2009 в 10:50)
| | Большое вам спасибо, получилось так:
| |
|
|
|
|
|
|
|
для: 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, $a, 2);
print_r( $a ) && print "\n################\n";
preg_match_all($reg3, $txt, $a, 2);
print_r( $a ) && print "\n################\n";
preg_match_all($reg4, $txt, $a, 2);
print_r( $a ) && print "\n################\n\n";
preg_match_all($reg5, $txt, $a, 2);
print_r( $a ) && print "\n################\n";
preg_match_all($reg6, $txt, $a, 2);
print_r( $a ) && print "\n################\n";
?>
|
| |
|
|
|