2011-01-26 2 views
2

Может кто-нибудь, пожалуйста, скажите мне, что не так с этим регулярным выражением?Проблема с регулярным выражением PHP

preg_match("/\+?)\)(=.+?,.+?)?\](.+?)\[\/quote\](?!((.*?)\[\/quote\]))/s", $text, $match, null, $start); 

Следует функционировать (я нашел это на форуме), но он выдает ошибку: Предупреждение: preg_match() [function.preg матча]: Компиляция не удалось: непарные скобки по смещению 3

Я предполагаю, что что-то не так в скобках?

Спасибо заранее, Фишеру

+1

Это регулярное выражение, безусловно, сломан. Если вы укажете предполагаемый результат и строку для соответствия регулярному выражению, мы могли бы попытаться дать полноценный ответ. –

ответ

4

"/\+?) - что ) не имеет себе равных. Вам либо нужно разместить открывающий паз где-то перед ним, либо избавиться от него. Не уверен, что было бы лучше всего, что бы вы ни пытались сделать.

+0

То, что я пытаюсь сделать, состоит в том, чтобы получить som data, извлеченный из следующего: [quote = quote-userName (32)] quote text [/ quote] ... Я бы хотел получить текущие данные: quot quote-userName (32) »и« цитата ». – fischer

2

Это говорит Вам, что первая), которая возникает в качестве третьего символа в выражении после сбежавший + и знак вопроса, не имеет себе равных. Либо отсутствует (в начале выражения, либо это) должно быть экранировано до \).

1

Отсутствует обратная косая

123 
"/\+?)\)(=.+?,.+?)?\](.+?)\[\/quote\](?!((.*?)\[\/quote\]))/s" 
    ^--- here 
"/\+?\)\)(=.+?,.+?)?\](.+?)\[\/quote\](?!((.*?)\[\/quote\]))/s" 
2

Попытка удаления первого закрывающую скобку:

\+?\)(=.+?,.+?)?\](.+?)\[\/quote\](?!((.*?)\[\/quote\])) 

Или избежать его, как это:

\+?\)\)(=.+?,.+?)?\](.+?)\[\/quote\](?!((.*?)\[\/quote\])) 
Смежные вопросы