2015-11-04 2 views
1

Да, я знаю, «не анализируйте HTML с помощью регулярного выражения». Я делаю это в блокноте ++, и это одноразовая вещь, поэтому, пожалуйста, медведь со мной на мгновение.Regex соответствует только первому вхождению элемента html

Я пытаюсь упростить некоторые HTML-коды, используя несколько более сложных методов. Примечательно, что у меня есть «вставки» или «выноски» или все, что вы их называете, в моей документации с указанием «примечание», «предупреждение» и «технические» короткие фразы, чтобы привлечь внимание читателя к важной информации:

<div class="note"> 
    <p><strong>Notes</strong>: This icon shows you something that complements 
    the information around it. Understanding notes is not critical but 
    may be helpful when using the product.</p> 
</div> 
<div class="warning"> 
    <p><strong>Warnings</strong>: This icon shows information that may 
    be critical when using the product. 
    It is important to pay attention to these warnings.</p> 
</div> 
<div class="technical"> 
    <p><strong>Technical</strong>: This icon shows technical information 
    that may require some technical knowledge to understand. </p> 
</div> 

Я хочу, чтобы упростить этот HTML в следующем:

<div class="box note"><strong>Notes</strong>: This icon shows you something that complements 
    the information around it. Understanding notes is not critical but 
    may be helpful when using the product.</div> 
<div class="box warning"><strong>Warnings</strong>: This icon shows information that may 
    be critical when using the product. 
    It is important to pay attention to these warnings.</div> 
<div class="box technical"><strong>Technical</strong>: This icon shows technical information 
    that may require some technical knowledge to understand.</div> 

Я почти есть регулярное выражение, необходимые, чтобы сделать хороший глобальный поиск & заменить в моем проекте из блокнота ++, но это не собирание «только» первый div, он поднимает все из них - если мой курсор находится в начале моего le, «выберите», когда я нажимаю «Найти» с первого <div class="something"> до последнего </div>, по существу.

Вот мое выражение: <div class="(.*[^"])">[^<]*<p>(.*?)<\/p>[^<]*<\/div> (notepad ++ "автоматически" добавляет// вокруг него, любопытное).

Что я делаю неправильно, здесь?

+1

Хорошая работа, чтобы ваши операторы неохотно. Я попробую изменить эту часть: 'class =" (. * [^ "])" 'To' class = "([^"] *) "' для запуска. – Welbog

ответ

1

У вас есть жадный квантификатор точки при сопоставлении атрибута class - это злой парень, который вызывает ваши проблемы.

Сделать его нежирным: <div class="(.*?[^"])"> или изменить его на класс персонажа: <div class="([^"]*)">.

Сравнить: greedy class против non-greedy class.

+0

Я знал, что это была немая синтаксическая ошибка. Спасибо, Алекс! –

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