прежде всего, извините меня за то, что вы не знакомы с регулярным выражением. Что бы мне хотелось, это регулярное выражение, которое будет извлекать дату типа mysql из любого типа строки. До сих пор я использовал это: ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$
Однако теперь я хочу извлечь шаблоны дат из других строк и строк datetime, которые я попытался изменить регулярное выражение на ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]).
основанный на некоторых онлайн-тестировщиках регулярных выражений, но он терпит неудачу. Также несколько раз это давало мне результат с 3-значным днем.
Другими словами, sting начинается с yyyy-mm-dd
и сопровождается пробелами символов или что-то еще. Как извлечь дату?
ОБНОВИТЬ
Я тестирую regex с preg_match здесь: http://www.pagecolumn.com/tool/pregtest.htm
пока что единственная вещь, которая, кажется, работает
[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])
Чтобы соответствовать датам, где бы они ни появлялись, удалите привязки $
и ^
из исходного исходного выражения.
Чтобы соответствовать датам в начале любого ввода, удалите $
в конце (оставьте ^
).
Вы также можете поместить оставшийся шаблон в круглые скобки для удобства, чтобы совпадение также было зафиксировано в целом.
Ваше предлагаемое улучшение имеет ложную точку в конце, которая будет соответствовать любому персонажу; это стало причиной возвращения матчей с трехзначными днями.
Если в вашей строке указано более одного значения формы даты, и вы хотите их захватить, вы должны использовать preg_match_all
и если это не preg_match
, достаточно. Кроме того, использование ^
и $
означает, что входная строка должна быть просто датой, поэтому избегайте ее.
<?php $input_string = "yes today is 2013-10-24"; if(preg_match("/\d{4}-\d{2}-\d{2}/", $input_string, $match)) { print_r($match); } else echo "not matched"; //////////////////////// /* Output: Array ( [0] => 2013-10-24 ) */
Демо-версия
Попробуйте это: вы можете использовать preg_match()
или preg_match_all()
$dateArray = preg_match("/(\d{4}-\d{2}-\d{2})/", $str, $match);
Затем используйте strtotime и дату
$date = date('Ym-d',strtotime($match[0]));
Просто замените ^
для \b
.
\b(\d{4}-\d{2}-\d{2})
Это точка в конце вашего регулярного выражения (она соответствует любому символу, за исключением разрывов строк). Попробуйте удалить его
^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])