Вам также нужно nd
для "секунды".
split /(?=\d{2}(?:st|nd|rd|th) \w{3} \d{4})/a, $str;
/a
вызывает ASCII-интерпретацию \d
, поэтому такие вещи, как "६", не совпадают.
Нулевое упреждающее утверждение (?=)
используется для разделения строки непосредственно перед началом матча, то есть в начале даты (спасибо ikegami за идею).
Вы можете также используйте
split /(\d{2}(?:st|nd|rd|th) \w{3} \d{4}(?: \d{1,2}:\d{2}:\d{2} [ap]m)?) ?/a
для разделения временных отметок:
$VAR1 = [
' ',
'30th Mar 2020 5:53:18 pm',
'Basant Jain: BJ: Bloomberg Runs',
'30th Mar 2020 5:53:27 pm',
'Basant Jain: DS: ICE DATA = INC1018483661',
# ...
'31st Mar 2020 8:30:36 am',
'Kishan Bholah: WJ: RE: Bulking Booking P&L - INC1018498292',
'31st Mar 2020'
];
Обратите внимание, что \d+st|nd
не делает то, что вам нужно: \d+
является частью только первой альтернативы, вам нужно использовать скобки, чтобы сгруппировать вещи вместе. Я использовал несовпадающий вариант (?:...)
, чтобы split не включил совпадение в возвращаемое значение.