Как я могу получить дату из String с помощью регулярных выражений в Java? - PullRequest
0 голосов
/ 06 апреля 2011

вот мой код:

String t1="postby <span title=\"2011-4-5 17:22\">yesterday&nbsp;17:22</span>";
String t2="postby 2010-11-12 10:02";

Я хочу получить 2011-4-5 17:22, 2010-11-12 10:02 из t1 или t2, используя одно выражение регулярного выражения

(вход t1или t2, выведите дату)

как это сделать?(пожалуйста, дайте мне пример кода, спасибо)

Ответы [ 2 ]

7 голосов
/ 06 апреля 2011
\d{4}-\d{1,2}-\d{1,2} \d{2}:\d{2}

Несколько примечаний:

  • вам придется экранировать косую черту в строке: String pattern = "\\d{4}-\\d{1,2}....."
  • \d означает «цифра» (0-9)
  • {x} означает «х раз»
  • {x,y} означает «не менее х, но не более y раз»

Ссылка: java.util.regex.Pattern

1 голос
/ 06 апреля 2011

Сколько ложных совпадений вы позволите?Божо уже предложил шаблон

\d{4}-\d{1,2}-\d{1,2} \d{2}:\d{2}

Но это соответствует следующим сомнительным случаям: 0000-1-1 00:00 (нет нуля года), 2011-0-1 00:00 (нет нуля месяца),2011-13-1 00:00 (13-го месяца нет), 2011-1-32 00:00 (32-го дня месяца) 2011-12-31 24:00 (не более одной прыжковой секунды) и 2011-12-31 23:61 (не более одного прыжкового периода).

Вы хотите проанализировать дату / время, которые почти , но не совсем, в формате ISO-8601 .Если вы можете, , пожалуйста, используйте этот международный стандартный формат.

В одной из моих программ (сценарий оболочки с использованием grep) я использовал следующее регулярное выражение:

^20[0-9][0-9]-[01][0-9]-[0-3][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]UTC$

Мне пришлось иметь дело с T и UTC, я интересовался только датами в этом столетии и анализировал их с точностью до секунд.Я вижу, что я не ограничивал значения часов и минут, возможно, потому, что традиционные преобразования C / C ++ могут их обрабатывать.

Полагаю, вы могли бы использовать что-то вроде следующего:

\d{4}-[01]\d-[0-3]\d [0-2]\d:[0-6]\d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...