Чтобы регулярное выражение выполняло эту работу, необходимо сделать некоторые предположения. Задачи не должны включать «@» или «вкл», например, но их может быть больше.
Чтобы соответствовать любому символу, кроме первого пробела для "@" или "on", я бы использовал (?! @ | on ).
Таким образом, вы можете найти задачу, используя (((?! @ | on ).)+)
. За этим следует необязательное местоположение с префиксом «@»: (?: @ ((?:(?! on ).)+))?
. Обратите внимание, что здесь не должно быть «on».
После этого указывается необязательная дата с дополнительным временем: (?: on ((?:(?! @ ).)+)(?: @ (.+))?)?
. Все вместе:
((?:(?! @ | on ).)+)(?: @ ((?:(?! on ).)+))?(?: on ((?:(?! @ ).)+)(?: @ (.+))?)?
Это будет иметь задачу, местоположение, дату и время в первых четырех группах захвата. Смотрите здесь: http://regexr.com? 2tnb3