Совпадение всего кода между двумя тегами HTML с использованием REGEX

Я ищу жадное совпадение RegEx, чтобы заменить весь текст в ряде файлов HTML между </title> а также </head> (Я объединил множество файлов JavaScript, чтобы минимизировать количество http-запросов).

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

Это мое текущее выражение, которое, кажется, не работает:-

</title>([^<]*)</head>

Я использую Dreamweaver 8 поиска и замены.

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

Я хочу заменить все эти два тега на всех страницах последовательным списком включений CSS / JavaScript.

3 ответа

Решение

Если DreamWeaver regex поддерживает прогнозные утверждения:

</title>((?:(?!</head>)[\s\S])*)</head>

Применяется обычное предупреждение "не работайте с HTML с регулярным выражением, в какой-то момент это не удастся". Точки, где это может потерпеть неудачу, могут быть:

<script>var str = "something that contains </head>";<script>

или же

<!-- a comment that refers to </head> -->

среди других созвездий.

Вы пытались использовать что-то вроде http://www.regextester.com/? Вы могли бы проверить свое регулярное выражение вживую?

Есть и другие подходы, которые вы можете использовать, чтобы "проверить" ваше дело.

//if i consider you are using php as you are looking for regex
//regex : '#\<\title\>(.+?)\<\/head\>#s'
//in php

    $content_processed = preg_replace_callback(
      '#\<\title\>(.+?)\<\/head\>#s',
      create_function(
        '$matches',
        'return htmlentities($matches[1]);'
      ),
      $content
    );

// this will return content between the tag
Другие вопросы по тегам