Я хотел бы проанализировать некоторые записи личного календаря, которые могут начинаться с одного или нескольких тегов. В идеальном мире у меня были бы чистые случаи (ниже три примера из трех отдельных записей):
a description without tags
[one] [two] hello
[single] world
Это должно вернуть меня соответственно:
a description without tags
one
, two
, hello
single
, word
Идея состоит в том, чтобы иметь в качестве входных данных: необязательно a [tag]
(или более, разделенных пробелом) и описание - в идеале сгруппированные в список тегов (возможно, пустых) и строку описания.
Я думаю, что я сопоставил эти случаи с (\[(\S+)\])*.+
. Однако я не уверен, правильно ли пропущен пробел между тегами.
В любом случае реальность такова, что мои пользователи-подростки, набирающие текст для подростков, получат такие записи, как
[glued1][glued2] wazaa
[glued10][glued20]glued decription
[glued]wazii
и подобные.
Я хотел бы построить регулярное выражение, которое скажет "от начала строки, взять то, что находится между [
и ]
, столько раз насколько возможно (возможно, ноль) и верните мне эти совпадения, и то, что следует за последними ]
минус возможные промежутки между ними ".
Не слишком ли это сложно для регулярного выражения? Альтернатива состоит в том, чтобы анализировать строку символ за символом - что я смогу сделать, но это будет менее изящно.
Или - альтернативно - как далеко я могу go с регулярным выражением, и отказаться от в других случаях (они увидят, что что-то не так, если то, что они вводят, все равно не анализируется правильно)