Этому, вероятно, ответили на десятки времен, не мог найти ответ хотя...
Так или иначе работая в среде Smalltalk мне составили строку трех частей как это: "ttm 4/6/97 00:08"
. Строка является очень переменной, означая, что некоторая часть может отсутствовать (таким образом, это была бы строка, состоявшая из менее затем трех частей как "ttm 4/6/97"
) и порядок мог бы отличаться ("00:08 ttm 4/6/97"
). Кроме того, дата могла бы пропускать цифры ("04/6/1997"
, "4/06/97"
, и т.д.). К счастью пробелы как разделители являются постоянными плюс, нет никакого продвижения или конечных пробелов.
То, в чем я нуждаюсь, должно найти дату в строке и соответствовать двум частям как так: (4/6/)(97)
. Я имел успех до сих пор для определенных комбинаций только с чем-то вроде этого:
^\S*\s?(\d\d?/\d\d?/)(\d\d\d?\d?)\s?\S*
Кто-то мог указать на меня в правильном направлении?
Править: Для создания проблемы более простой, я пытался стать достойным всей даты с помощью следующего выражения: ^.*(\d\d?/\d\d?/\d\d\d?\d?).*
(matcher ожидает, что выражение соответствует всей строке). Относившийся строка "10/4/97 00:08 di"
возвращенное соответствие "0/4/97"
(возможно, matcher не является самым большим никогда созданный...). regex мог представить в виде строки так или иначе быть измененным, чтобы гарантировать, что matcher возвращает всю дату? (Благодаря SilentGhost для редактирования).
Кажется, вы пытаетесь сопоставить слишком много элементов. Если дата - это единственное, что вас интересует, почему бы не использовать следующее:
(\d{,2}/\d{,2}/)(\d{2,4})
Обратите внимание, что теоретически он будет соответствовать и трехзначному году. Я предполагаю, что на практике у вас не будет такого ввода.