#1 2010.03.21 13:21

Fuelen
Участник
Зарегистрирован: 2009.06.22
Сообщений: 229
Карма: 5
Профиль

Ошибка в регулярке

Вот такая http://fuelen.eeex.ru/bbcode.php
Регулярка
preg_replace_callback('#(?<!\['.$this->data['codetags'].'\]).*\[(\w+)\](.
+)\[/\\2\].*(?!\[/'.$this->data['codetags'].'\])#iuUs', array($this, 'simpleBB'), $text) в чём собственно ошибка?
Добавлено спустя   1 минуту  30 секунд:
$this->data['codetags'] = '(php|code)';

Отредактировано Fuelen (2010.03.21 13:25)


на хую вас вертів

Неактивен

#2 2010.03.21 13:38

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Ошибка в регулярке

Fuelen написал:

#(?<!\[

пологаю, проблема в этом.

Неактивен

#3 2010.03.21 13:59

Fuelen
Участник
Зарегистрирован: 2009.06.22
Сообщений: 229
Карма: 5
Профиль

Re: Ошибка в регулярке

Утверждения касательно последующего текста начинаются с (?= для положительных утверждений и с (?! для отрицающих утверждений.
Утверждения касательно предшествующего текста начинаются с (?<= для положительных утверждений и (?<! для отрицающих.
http://php.su/lessons/?lesson_17 здесь так пишет...


на хую вас вертів

Неактивен

#4 2010.03.21 14:43

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Ошибка в регулярке

Код:

1
2
3
4
5
6
7
8
9
10
11
class Test {
public function simpleBB () {
return 1;
}
public function b() {
preg_replace_callback('#(?<!\[php\]|\[code\]).*\[(\w+)\](.+)\[/\\2\].*(?!\[/(php|code)\])#iuUs', array($this, 'simpleBB'), 'sdfgsdhdgfg');
}
}
 
$x = new Test;
$x->b();

http://docs.php.net/manual/ru/regexp.reference.php

Утверждения касательно предшествующего текста начинаются с (?<= для положительных утверждений и (?<! для отрицающих. Например, (?<!foo)bar не найдёт вхождения "bar", которым не предшествует "foo". Сами утверждения 'назад' ограничены так, чтобы все подстроки, которым они соответствуют, имели фиксированную длину. Но, в случае, если используются несколько альтернатив, они не обязаны иметь одинаковую длину. Таким образом шаблон (?<=bullock|donkey) корректен, но (?<!dogs?|cats?) вызовет ошибку во время компиляции. Ветки, которые соответствуют строкам разной длины, разрешены только на верхнем уровне утверждений касательно предшествующего текста. Это расширение относительно Perl 5.005, который требует чтобы все ветки соответствовали строкам одинаковой длины. Такое утверждение как (?<=ab(c|de)) не корректно, поскольку верхний уровень маски может соответствовать строкам разной длины, но его можно преобразовать к корректному шаблону, используя альтернативы на верхнем уровне: (?<=abc|abde). Утверждения касательно предшествующего текста реализованы так, что для каждой альтернативы текущая позиция временно переносится назад, на фиксированную ширину, после чего выполняется поиск соответствия условию. В случае, если перед текущей позицией недостаточно символов, поиск соответствия терпит неудачу. Утверждения назад в сочетании с однократными подмасками могут быть особенно удобны для поиска в конце строки; соответствующий пример приведен в конце раздела "Однократные подмаски".

Ранее не приходилось как-то плотно работать с утверждениями)

Неактивен

#5 2010.03.21 14:53

Fuelen
Участник
Зарегистрирован: 2009.06.22
Сообщений: 229
Карма: 5
Профиль

Re: Ошибка в регулярке

Хы.. Спасибо smile


на хую вас вертів

Неактивен

#6 2010.03.22 01:35

Fuelen
Участник
Зарегистрирован: 2009.06.22
Сообщений: 229
Карма: 5
Профиль

Re: Ошибка в регулярке

Вот ещё вопрос появился...
Как сделать, чтобы .*, что перед открывающим и после закрывающего ббкода в замену не входило? Если пишу типа (?=.*), то ошибка Compilation failed: lookbehind assertion is not fixed length

Отредактировано Fuelen (2010.03.22 18:59)


на хую вас вертів

Неактивен

#7 2010.03.22 07:58

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Ошибка в регулярке

убери модификатор U

Неактивен

#8 2010.03.22 18:58

Fuelen
Участник
Зарегистрирован: 2009.06.22
Сообщений: 229
Карма: 5
Профиль

Re: Ошибка в регулярке

Убрал.
Не сработало


на хую вас вертів

Неактивен

#9 2010.03.22 21:18

Fuelen
Участник
Зарегистрирован: 2009.06.22
Сообщений: 229
Карма: 5
Профиль

Re: Ошибка в регулярке

Разобрался


на хую вас вертів

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.010 s