создать регулярное выражение для нескольких матчей - PullRequest
2 голосов
/ 02 февраля 2010

Я проверю строку даты, чтобы увидеть, является ли она одной из этих трех: дд-мм-гггг ИЛИ гггг ИЛИ дд-мм-гггг / дд-мм-гггг

Я объединил эти три, но последний создает проблемы, так как я не могу просто сопоставить один "/", используя \ Q / \ E.

[0-9]{2}-[0-9]{2}-[0-9]{4}                                -> dd-mm-yyyy
[0-9]{4}                                                  -> yyyy
[0-9]{2}-[0-9]{2}-[0-9]{4}\Q/\E[0-9]{2}-[0-9]{2}-[0-9]{4} -> dd-mm-yyyy/dd-mm-yyyy

В совокупности они дадут следующее выражение:

([0-9]{2}-[0-9]{2}-[0-9]{4}|[0-9]{4}|[0-9]{2}-[0-9]{2}-[0-9]{4}\Q/\E[0-9]{2}-[0-9]{2}-[0-9]{4})

Вопрос 1: Как разрешить только один "/" между датами?

Вопрос 2: Что означает ^ в начале регулярного выражения и $ в конце? И должен У меня это в моем

Br. Андерс

ОБНОВЛЕНИЕ: (основываясь на ответах и ​​комментариях ниже) Спасибо! Два правильных ответа. Я пометил последний правильно, так как также был гораздо более плавный способ написать то, что я пытался сделать.

Язык, вероятно, XSLT или C #. Именно в CMS Umbraco я помещаю регулярное выражение для проверки поля ввода / ввода по умолчанию.

Это немного забавно. Нет разницы, если я добавлю ^ в начало, поэтому мой вопрос об этом.

Эта строка отлично работает: ^ (?: \ D {4} | \ d {2} - \ d {2} - \ d {4} (?: / \ D {2} - \ d {2} - \ d {4})) $

Ответы [ 2 ]

1 голос
/ 02 февраля 2010

Поскольку вы не указали язык, я предложу рабочую версию Perl:

/^(?:\d{4}|\d{2}-\d{2}-\d{4}(?:\/\d{2}-\d{2}-\d{4})?)$/

Шаблон объяснил:

  • начинаться с первого символа строки
  • искать 4 цифры (\d{4})
  • OR
  • последовательность two digits dash two digits dash four digits
  • опционально a slash two digits dash two digits dash four digits
  • соответствует концу строки, чтобы убедиться, что больше ничего нет

Я процитировал буквальное значение /, написав \/, так как это самый мультиязычный способ сделать это: в Perl было бы достаточно выбрать другой разделитель шаблонов, чтобы избежать необходимости экранирования.

1 голос
/ 02 февраля 2010

Было бы полезно, если бы вы сказали нам, какой вариант регулярного выражения или язык программирования вы используете. Я возьму Perl на данный момент.

  • Вопрос 1: экранируйте его, используя обратную косую черту (\): \/.
  • Вопрос 2: ^ означает начало ввода, $ означает конец. использование обоих означает совпадение строк, которые точно соответствуют моему запросу, без каких-либо других вещей в начале или в конце. Поскольку вы хотите сопоставить строки даты , а не строки с датой в них , вы должны использовать их в своем запросе
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...