Visual Studio: сопоставление регулярных выражений с переменным числом строк - PullRequest
2 голосов
/ 18 января 2011

С учетом следующего HTML:

<tag1>
    <tag2 attr2="val2"/>
</tag1>
<tag1>
    <tag2
    attr2="val2"/>
</tag1>

Я хочу уничтожить все теги2 в этом HTML с помощью одного регулярного выражения в Visual Studio.

Для соответствия первому: \<tag2.+\/\>

Чтобы соответствовать второму: \<tag2.*\n.*\/\>

Итак, предположим, что я хочу объединить эти две стратегии, чтобы они соответствовали обеим. Ни один из приведенных ниже не соответствует обоим тегам tag2:

\<tag2.*\/\>
\<tag2[.\n]*\/\>
\<tag2.*\n?.*\/\>
\<tag2[.\r\n]*\/\>

Я получаю: Первый тег Не совпадает Не совпадает Нет совпадений

Они действительно должны, но кажется, что переменное число новых строк заставляет VS никогда не совпадать. Ошибка?

Это мучает меня в VS2005, VS2008 и VS2010.

1 Ответ

4 голосов
/ 18 января 2011

. должен быть за пределами [], в противном случае он соответствует только одному буквальному символу ..Попробуйте:

\<tag2(.|[\r\n])*\/\>
...