2012-03-27 4 views
0

Я написал регулярное выражение, пытаясь сопоставить некоторый HTML-код, но я не могу работать. У меня возникла проблема с частью после «wp-caption».Почему моя обратная ссылка в моем регулярном выражении не работает?

class=(["\'])(?:[\w\s])*?wp-caption[\s\1] 

код Я хочу, чтобы соответствовать:

class="wp-caption" 
class='wp-caption' 
class="wp-caption foo" 
class="foo wp-caption" 

Я соответствую первые три результата, но не четвертый. Я не думаю, что \ 1 работает. Есть предположения?

BTdubs Я использовал http://regexpal.com/ для тестирования.

+1

Я никогда не видел «BTdubs» раньше. Это восхитительно. – octern

+0

Вы правы, обратные ссылки не работают внутри скобок. – aMarCruz

ответ

1

Это может сработать слишком

class\s*=\s*(['"])(?:(?!\1).)*wp-caption(?:(?!\1).)*\1 
0

Это не работает, потому что обратные_связи не может ссылаться из класса символов (вещи в квадратных скобках []). Как упоминалось в другом ответе, вы можете использовать backrefence в lookahead, если вы не используете язык, который не поддерживает lookaround ...

Короче говоря, то, что вам нужно сделать, зависит от языка, который вы используете (реализация регулярных выражений сильно зависит от того, какой язык их реализует)

+0

Я даже не слышал о взглядах. Итак, почему backreference работает с первыми тремя примерами? – BFTrick

+0

@BFTrick честно, я не уверен, почему он будет работать с первыми двумя - я достаточно разбираюсь в нескольких вариантах регулярного выражения (включая JavaScript, который, как я предполагаю, вы используете), и я не вижу, как ваше выражение может совпадать с первыми двумя строками, но я вырезал и вставлял ваше выражение и код примера в regexpal.com, чтобы быть уверенным, и он соответствует только третьей строке в вашем примере ... –

+0

@BFTrick '[\ s \ 1]' означает «по сути» совпадение либо пробельного символа (пробел, табуляция, CrLf и т. д.), обратная косая черта, _or_ буква буква «1» - если вы пытались идентифицировать любой атрибут класса, который _contained_ 'wp-caption', тогда я предположим, что вы удалили некоторые другие классы, которые были _following_ 'wp-caption', и совпадения были успешными только потому, что они попали в пробелы между этими классами - они не могут быть способны сопоставлять первые две строки в вашем примере кода с помощью вашего выражения. [-> Дополнительная информация о 'lookaround'] (http://www.regular-expressions.info/lookaround.html) –

 Смежные вопросы

  • Нет связанных вопросов^_^