2012-05-01 6 views
0

Я следующее регулярное выражение:Regexp соответствующий тег HTML

^(?:(?!<(\w+)(\s+(\w+)\s*\=\s*(\'|")(.*?)\\4\s*)*\s*>).)*$ 

И у меня есть текстовое поле, где пользователь может ввести код JavaScript, так регулярное выражение должно соответствовать такие вещи, как:

if (i <html> 0) || (j > 10) 

и он работает, но только для одного но он должен работать для многострочных

кстати. Я проверить регулярное выражение на этой странице: http://www.zytrax.com/tech/web/regex.htm#experiment

+0

Что вы используете для запуска регулярного выражения? это инструмент командной строки или скрипт или это в коде? Некоторые инструменты регулярного выражения не будут совпадать на нескольких строках. – Rob

+0

использовать в asp: RegularExpressionValidator – aishlin

+0

Какое вам нужно совпадение в случае, если у вас есть выше? и вы могли бы дать случай с несколькими строками и желаемым совпадением в этом случае. – Rob

ответ

0

Если это JavaScript вы будете М многострочный модификатор в своем регулярном выражении:

вы можете проверить, что он работает здесь: http://regexpal.com/

0

Все движок регулярных выражений есть возможность для соответствия multi-line. Поскольку в вашем вопросе не упоминается, какой движок вы используете, вам нелегко помочь вам в дальнейшем.

1

Причина, по которой она терпит неудачу на многострочном вводе, заключается в том, что точка (.) по умолчанию не соответствует символам новой строки. Вы можете исправить это, добавив (?s) в начало регулярного выражения, чтобы поместить его в режим Singleline (также известный как режим DOTALL в некоторых вариантах, поскольку он набирает точку, чтобы соответствовать всем , включая).

Многострочный режим, о котором говорили другие респонденты, вероятно, не относится к вашему делу. Это позволяет привязать якоря ^ и $ к началу и концу отдельных линий, а также к началу и концу всей строки.

Вы сказали, что используете это в ASP.NET RegularExpressionValidator, что вызывает еще одну потенциальную проблему. Если валидатор настроен на выполнение валидации как на стороне клиента, так и на сервере, это будет использование JavaScript-регекса, работающего не на .NET. JavaScript не поддерживает режим Singleline/DOTALL, поэтому вам нужно заменить точку в вашем регулярном выражении на что-то еще, что соответствует всем символам; большинство людей используют [\s\S] (любой символ пробела или любой символ, который не пробел).

Вот в результате регулярных выражений, в том числе более надежной идиомы для приведенных значений атрибутов:

^(?:(?!<\w+(?:\s+\w+\s*\=\s*(['"])(?:(?!\1).)*\1)*\s*>)[\s\S])*$ 
Смежные вопросы