Причина, по которой она терпит неудачу на многострочном вводе, заключается в том, что точка (.
) по умолчанию не соответствует символам новой строки. Вы можете исправить это, добавив (?s)
в начало регулярного выражения, чтобы поместить его в режим Singleline (также известный как режим DOTALL в некоторых вариантах, поскольку он набирает точку, чтобы соответствовать всем , включая).
Многострочный режим, о котором говорили другие респонденты, вероятно, не относится к вашему делу. Это позволяет привязать якоря ^
и $
к началу и концу отдельных линий, а также к началу и концу всей строки.
Вы сказали, что используете это в ASP.NET RegularExpressionValidator, что вызывает еще одну потенциальную проблему. Если валидатор настроен на выполнение валидации как на стороне клиента, так и на сервере, это будет использование JavaScript-регекса, работающего не на .NET. JavaScript не поддерживает режим Singleline/DOTALL, поэтому вам нужно заменить точку в вашем регулярном выражении на что-то еще, что соответствует всем символам; большинство людей используют [\s\S]
(любой символ пробела или любой символ, который не пробел).
Вот в результате регулярных выражений, в том числе более надежной идиомы для приведенных значений атрибутов:
^(?:(?!<\w+(?:\s+\w+\s*\=\s*(['"])(?:(?!\1).)*\1)*\s*>)[\s\S])*$
Что вы используете для запуска регулярного выражения? это инструмент командной строки или скрипт или это в коде? Некоторые инструменты регулярного выражения не будут совпадать на нескольких строках. – Rob
использовать в asp: RegularExpressionValidator – aishlin
Какое вам нужно совпадение в случае, если у вас есть выше? и вы могли бы дать случай с несколькими строками и желаемым совпадением в этом случае. – Rob