Регулярные выражения - ссылка на первое совпадение в поиске - PullRequest
1 голос
/ 03 мая 2011

Я не совсем знаю, как описать мою проблему в коротком заголовке, поэтому мне жаль, если заголовок этого вопроса немного ошибочен. Но я действительно не знаю, как называется то, что я ищу, и возможно ли это вообще.

Я пытаюсь использовать регулярное выражение, чтобы найти все между набором совпадающих тегов в HTML. Это было легко для меня, когда я тестировал со статическими тегами, потому что я мог просто искать все между двумя фрагментами текста, например \{myTag\}(someExpression)\{\/myTag\}

Моя проблема связана с тем, что myTag может быть чем угодно. Я просто не знаю, как (или если это вообще возможно) сопоставить начальный тег с конечным тегом, когда этот текст является переменной.

Мне показалось, что раньше я видел какую-то систему ссылок в регулярных выражениях, где вы можете использовать знак доллара и число, но я не знаю, можете ли вы использовать это в самом поиске.

Первоначально я думал, что, возможно, я мог бы написать что-то вроде: \{(.*?)\}(someExpression)\{\/${1}\}, но я понятия не имею, сработает ли это на самом деле или возможно ли это (не говоря уже о том, правильно ли это).

Я надеюсь, что этот вопрос имеет смысл, поскольку я не совсем уверен, как его задать. Главным образом потому, что, как я уже сказал, я не знаю, есть ли у него имя, возможно ли это, и я также абсолютный новичок на регулярных экзаменах.

И если что-то изменит, язык, который я делаю, - это PHP с функцией preg_replace_callback.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Попробуйте это:

\{([^}]*)\}(someExpression)\{\/\1\}

, но имейте в виду, что вам нужно убедиться, что someExpression также не соответствует конечным тегам (как, например, .*). И, конечно же, если теги вложены, все ставки отменены, и вам понадобится другое регулярное выражение (или парсер).

0 голосов
/ 03 мая 2011

Это зависит от вашего случая. Если вы знаете, что это всего лишь фрагмент кода HTML, и существует определенный шаблон, по которому вы можете искать в HTML, вы можете использовать регулярное выражение для поиска и замены шаблона, но мне кажется, что вы пытаетесь проанализировать HTML. Так что проблема была бы, если бы у вас был вложенный тег. Вы должны проверить http://php.net/manual/en/function.preg-replace.php, потому что это кажется гораздо более простой в использовании функцией, чем функция с обратным вызовом.

В качестве заметки о регулярных выражениях вы можете использовать $ i или \ i в зависимости от используемого вами языка. Я не знаю, поддерживает ли php regex захват группы.

...