2010-08-03 3 views
12

Я пытаюсь найти все теги HTML-ввода с типом «текста» внутри Netbeans 6.9.Netbeans Многострочный регулярный поиск выражения

Поддерживает ли Netbeans поиск строки с использованием регулярных выражений с разными критериями поиска, распределенными по нескольким строкам или работает только в одной строке?

Это регулярное выражение

<input.*type=['"]text['"].*/> 

работает, когда весь тег и его атрибуты написаны в одной строке, как этот

<input name="data[something]" id="some_id" value="some_value" type="text" /> 

Но так как я не писать длинные строки кода и сломать их такие как

<input name="data[something]" id="some_id" 
     value="some_value" type="text" /> 

такое же регулярное выражение не работает.

Есть ли способ, которым это может быть достигнуто?

ответ

20

По умолчанию метасимвол . не соответствует символам новой строки. Должна быть опция под названием «Single-Line» или «DOTALL» или аналогичная, которая позволяет совпадению точки с символом. Или вы можете добавить (?s) в начало регулярного выражения и получить тот же эффект только для этого регулярного выражения.

Но было бы лучше заменить .* на [^<>]*. В режиме DOTALL .* попытается сожрать весь остальной документ, что приведет к низкой производительности и/или неправильным совпадениям, но [^<>]* никогда не будет пытаться соответствовать концу тега.

Кстати, если вы используете ['|"] для соответствия одной кавычки или двойной кавычки, избавитесь от |. «ИЛИ» подразумевается в классе символов, поэтому вам нужно только ['"] (| просто будет соответствовать буквалу |).

+0

У меня есть аналогичная проблема, и ваш ответ помог мне. Но появилась еще одна проблема: мое регулярное выражение остается жадным. Где я могу узнать больше об этом? (? S) в начале? Могу ли я сделать это регулярное выражение не жадным? Благодаря! – Hnatt

+4

Ничего, я нашел его. '(. *)' - жадный, '(. *?)' - не жадный. – Hnatt

+0

(? S) помогли найти матчи где. (Точка) включили новую линию, большое спасибо! – user219628

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