#asp.net #.net #regex
#asp.net #.net #регулярное выражение
Вопрос:
Я пытаюсь создать регулярное выражение, соответствующее тексту, введенному пользователем при многострочном вводе
Текст должен быть в этой форме:
Class 1: Exemple1
Class 2: Exemple2
....
Каждая строка должна соответствовать этому синтаксису.
Мне удалось создать регулярное выражение для одной строки, но я не могу найти подходящее решение для расширения его до многострочной версии
<asp:RegularExpressionValidator ID="RegularExpressionValidator" runat="server"
ErrorMessage="This is wrong!" ValidationExpression="^[Class] s[0-9] : s [a-zA-Z] $"
ControlToValidate="txtUserInput"></asp:RegularExpressionValidator><br />
Заранее благодарю вас за вашу помощь
Комментарии:
1. Но это будет работать только для 2 строк, верно? количество строк неизвестно
2. Вы можете использовать
AClasss[0-9] :s [a-zA-Z0-9] (?:r?nClasss[0-9] :s [a-zA-Z0-9] )*Z
. Демонстрация: regex101.com/r/bleGnt/13. Спасибо, я собираюсь попробовать. кажется, это работает в вашей демонстрации, но не в моем проекте. Вероятно, потому, что разрыв строки в VB.NET является ли константа записанным vbLf или что-то вроде этого… мне придется его скорректировать. В любом случае, спасибо!
4. Используйте
r?n
затем. Или[rn]
(но это также приведет к сопоставлению пустых строк).
Ответ №1:
Вы можете использовать
^Class[ t] [0-9] :[ t] w (?:r?nClass[ t] [0-9] :[ t] w )*$
Или, если разрывы строк могут быть просто CR:
^Class[ t] [0-9] :[ t] w (?:(?:rn?|n)Class[ t] [0-9] :[ t] w )*$
Или, версия, не зависящая от последовательности разрыва строки (где r?n
заменяется на [rn]
, но между допустимыми строками могут совпадать пустые строки):
^Class[ t] [0-9] :[ t] w (?:[rn] Class[ t] [0-9] :[ t] w )*$
Смотрите демонстрацию регулярных выражений
Я предлагаю использовать [ t]
вместо s
для сопоставления горизонтальных пробелов (это будет работать как на стороне сервера, так и на стороне клиента) и заменить [a-zA-Z]
на w
, которое соответствует буквам, цифрам и символам подчеркивания, а не только буквам (поскольку ваш пример тоже содержит цифры).
Основное отличие заключается в (?:r?nYOUR_SINGLE_LINE_PATTERN)*
части, которая сопоставляет все последующие строки в желаемом формате, если таковой имеется.
Подробные сведения
^
— начало строкиClass
— последовательность символов[ t]
— 1 или более табуляций или пробелов[0-9]
— 1 или более цифр:
— двоеточие[ t]
— 1 или более табуляций или пробеловw
— один или несколько символов word(?:r?nClass[ t] [0-9] :[ t] w )*
— 0 или более повторений необязательного CR (vbCr
), за которым следует обязательный символ новой строки (vbLf
) (или, если[rn]
используется, только один или более символов CR или / и LF, или, если(?:rn?|n)
используется, CRLF, CR или LF разрыв строки) и шаблон первой строки$
— конец строки.
Комментарии:
1. Спасибо за ваш подробный ответ. очень признателен. У меня были проблемы с предыдущим предложением, и ваше работает отлично. Я думаю, что это как-то связано с разрывом строки, но вы, кажется, предлагаете то же самое, что и парень раньше ( r? n).