Как извлечь год, используя preg_match - PullRequest
0 голосов
/ 02 декабря 2010

У меня есть текстовая область, где пользователи вводят данные, я хочу извлечь год из текстовой области.Проблема в том, что пользователи вводят год по-разному.

некоторые пользователи вводят даты как 1999 или '99 или september 99.Как я могу использовать одну строку регулярного выражения для извлечения года.

Ответы [ 5 ]

2 голосов
/ 02 декабря 2010

Это должно работать для извлечения упомянутых дат из текста:

preg_match_all('/(^|\s+)(\d{4}|\'\d{2}|(january|february|march|april|may|june|july|august|september|october|november|december) \d{2})(\s+|$)/i', $text, $matches);

Это тоже пришло мне в голову (это дает пользователю немного больше свободы):

preg_match_all('/(^|\s+)((january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)?(\s|\s?\')(\d{2}|\d{4}))(\s+|$)/i', $text, $matches);

Все вышеперечисленное будет проще при разборе нескольких выражений.Зачем вам нужен один?

Если вы просто хотите проанализировать строку, которая не содержит ничего, кроме этого, вы должны использовать PHP-функцию strtotime()-101 * *.

0 голосов
/ 02 декабря 2010

Извлекайте только цифры из вашей строки:

/\b(\d+)\b/
0 голосов
/ 02 декабря 2010
[. -]((?:\d\d|')\d\d)$
0 голосов
/ 02 декабря 2010

Вы можете попробовать использовать strtotime:

strtotime - анализирует любое текстовое описание даты и времени на английском языке в метку времени Unix

date('Y', strtotime($userinput));
0 голосов
/ 02 декабря 2010
\b\d\d(?:\d\d)?\b

будет соответствовать двузначному или четырехзначному числу.Так что, если ваша строка содержит только номера года, этого должно быть достаточно.

if (preg_match('/\b\d\d(?:\d\d)?\b/', $subject, $regs)) {
    $result = $regs[0];
}
...