да, это другой .net regex question :) (прошу прощения за длинную вафлю, ведущую к актуальному вопросу)
Я разрешаю пользователям использовать простые макросы даты / времени для быстрого ввода дат (им не нужен инструмент выбора даты)
например, они могут ввести:
d +1d -2h
это даст им строку даты и времени сегодняшней даты, плюс один день, минус два часа.
В любом случае я создал регулярное выражение, чтобы соответствовать им, и это прекрасно работает (вероятно, не лучший способ сделать это, но это работает!):
\b[DTdt]( *[+-] *[1-9][0-9]* *[dDhHmMwW])*\b
как вы, наверное, догадались, я использую регулярное выражение для проверки этих записей перед их анализом для вычисления итоговой даты и времени. Сначала я использовал что-то вроде:
Regex rgxDateTimeMacro = new Regex(@"\b[DTdt]( *[+-] *[1-9][0-9]* *[dDhHmMwW])*\b");
if(rgxDateTimeMacro.isMatch(strInput)){
...string passes...
}
Затем я быстро понял, что isMatch возвращает true, если в переданной строке есть любые совпадения,
d +1d +1
вернул бы истину ^ __ ^
поэтому я изменил его, чтобы сделать что-то вроде этого:
Regex rgxDateTimeMacro = new Regex(@"\b[DTdt]( *[+-] *[1-9][0-9]* *[dDhHmMwW])*\b");
MatchCollection objMatches = rgxDateTimeMacro.Matches(strInput);
if (objMatches.Count > 0)
{
// to pass.. we need a match which is the same length as the input string...
foreach (Match m in objMatches)
{
if (m.Length == strInput.Length)
{
...string passes...
}
}
}
теперь это работает нормально, но у меня такой вопрос: есть ли более простой способ проверить, соответствует ли строка (строка целом ) регулярному выражению? У меня был гугл, но я не могу найти очевидного ответа.
надеюсь, что это имеет смысл
Пит
UPDATE
спасибо за все быстрые ответы, ^ $ добивается цели:)
(показывая мою неопытность с регулярными выражениями ^ __ ^)