2010-09-01 3 views
2

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

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

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

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

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

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

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

+2

Какой язык программирования/платформа вы используете? –

+0

@Adam добавить пример, я прочитал три раза, вы хотите преобразовать весь html в обычный текст? –

+0

Извините, ребята, отредактировал оригинальный пост с дополнительной информацией. –

ответ

3

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

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

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

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

или

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

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

+0

Это сработало отлично! Спасибо! –

0

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

Существуют и другие подходы, которые вы можете предпринять, чтобы «проверить» ваш случай.

+0

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

0
//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 
+2

Он пытается сделать это в Dreamweaver (поиск и замена), а не php – Jakub

+0

Hi Japan Pro, Я не использую PHP, я просто использую функциональные возможности Find + Replace по умолчанию в Dreamweaver. Я попытался положить в следующих комбинациях, так как вы писали, но безрезультатно: - 1. # \ <\title\> \ <\/head\> #s 2. <\title\> \ <\/head\> 3. <\title> ((+.?) (+.?). +?) –

+0

@Adam: Попробуйте '' вместо '<\title>' – kennytm

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