Регулярные выражения

Статус
Закрыто для дальнейших ответов.

fallout

Member
Регистрация
03.05.2007
Сообщения
17
Господа, как описать в регулярном выражении, что СТРОКА_1 не содержит определенной СТРОКИ_2. Именно строки, то есть СТРОКА_1 не содержит определенной последовательности из нескольких символов (символов больше одного и идут они в определенном порядке). Вот Надеюсь понятно расписал. :) А то бошка кипит.. :wacko:
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Думаю это тоже сойдёт

На держи

Код:
<?

$str1="щедрая душа";
$str2="Россия - Моя щедрая душа";
if(eregi($str1, $str2, $poket))
{
echo "Sodergit";
}else{
echo "Ne sodergit";
}
?>
Ах да... Эта функция учитывает реестр ((
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
Alex, внимательней "как описать в регулярном выражении"
И тема находиться не в топике php, так-что твое решение здесь не уместно..

Мне казалось что (!foo) или что-то в этом духе, но не уверен и не помню..
 

Alterbit

Well-Known Member
Регистрация
10.05.2005
Сообщения
78
че тут думать, определить содержится ли СТРОКА_2 в СТРОКЕ_1 и инвертировать условие.

if ( not содержится )

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

fallout

Member
Регистрация
03.05.2007
Сообщения
17
Alterbit, ты думаешь я идиот? :)

Мне нужно узнать как именно в регулярном выражении описать СТРОКУ в которой нет ДРУГОЙ_СТРОКИ, а перед СТРОКОЙ может быть что-то ещё, и после может быть что-то ещё.

Просто я не говорю какая конкретно задача. Если бы можно было всё сделать без REGEX я бы сделал.

Повторюсь, именно в рег. выражениях.
 

deMone

Злой страшный дядька
Регистрация
30.01.2006
Сообщения
937
используйте группировку (скобки) и исключение (гашек ^).
 

fallout

Member
Регистрация
03.05.2007
Сообщения
17
используйте группировку (скобки) и исключение (гашек ^).
А можно пример, если не сложно? Как использовать "^" вне символьного класса, он же тогда началом строки является. А если экранировать, то сам собой. Я про regex.

Заранее спасибо.
 

fallout

Member
Регистрация
03.05.2007
Сообщения
17
Короче, для примера.

Как описать на regex:

Строка состоит из любого количества, скажем символов класса [a-z], но не содержит подстроки "abc".


ЗЫ: Может у меня проблеммы с алгоритмизацией? :) За такой совет тоже спасибо скажу.
 

fallout

Member
Регистрация
03.05.2007
Сообщения
17
Тогда ближе к теме. Вопрос касался парсинга ХТМЛ с целью перевода его в текст.

Имеется ХТМЛ код
Код:
<script>
a = 'a';
b = 'b';
document.write (a + b);
</script>

<b>Some bold text</b>

<script>
c = 'c';
d = 'd';
alert (c + d);
</script>
Изнего нужно сделать текст.

strip_tags() не вырезает скрипты как известно (а так же тэги с ">" в параметрах, кстати). Так что приходится писать регэкспы. По поводу удаления тэга </script> в сети наше только вот такое: "/\<script[^\>]*\>[\s\S]*\<\/script\>/". А исходя из того, что механизм сравнения с рег. выражением пытается получить максимально большую строку получаем, что от исходного ХТМЛ кода ничего не остается, так как preg_replace () находит открывающий "<script>" в начале и закрывающий "</script>" в конце кода. И строка "Some bold text" теряется.

От того и спрашивал как описать что строка не содержит подстроки. Короче как написать, что между тэгами "<script>" и "</script>" нету "</script>". Одним символом ">" или "<" тут не ограничешься, ибо в скриптах они встречаются довольно часто.

Может у кого есть готовое решение?
 

deMone

Злой страшный дядька
Регистрация
30.01.2006
Сообщения
937
Вон чего. А вы жадность уменьшите у квантификатора повторения.

"/\<script[^\>]*\>[\s\S]*?\<\/script\>/"
Этот код не будет трогать всё, что находится вне <script>-ов.
 

Alterbit

Well-Known Member
Регистрация
10.05.2005
Сообщения
78
Код:
/<script.*?<\/script>/is
я думаю, можно до такого варианта сократить, должно работать
 

fallout

Member
Регистрация
03.05.2007
Сообщения
17
Спасибо. А можно разъяснить по поводу "?" после квантификатора? Это что значит, а то в доках про это я ничего не видел.

ЗЫ: А по сабжу ничего? Уже из интереса. :)
 

deMone

Злой страшный дядька
Регистрация
30.01.2006
Сообщения
937
«?» после квантификатора повторений уменьшает его «жадность». По-умолчанию квантификатор «*» захватывает максимальную подходящую маске подстроку. «?» делает так, что он захватывает минимальную часть.

Например, есть текст: a123a456a
Маска #a.*a#i вернёт нам всю строку;
Маска #a.*?a#i вернёт нам только a123a.
 

fallout

Member
Регистрация
03.05.2007
Сообщения
17
Спасибо. Буду пользоваться. :)
 
Статус
Закрыто для дальнейших ответов.
Верх Низ