Как перебрать регулярное выражение для элементов «1 или много»? - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь разработать регулярное выражение для чтения пейджерного сообщения по категориям.В конце коды отвечающих бригад (CBORT, CYAND)

Эти коды бригад представляют каждую отвечающую бригаду.Проблема в том, что может быть один, например.(CBORT) или много, например.(CBAGR, CBORT, CYAND).Я не уверен, как заставить регулярное выражение сопоставлять каждую бригаду как отдельный матч.

Каждый бригадный код будет иметь в качестве префикса букву C.

Можно ли это сделать с помощью регулярного выражения или мне потребуется PHP-скрипт для итерации по последней части сообщения, чтобы соответствоватькаждая из этих бригадных кодов в массив?

Сообщение пейджера: @@ ALERT BORT1 G & SC1 GRASS FIRE - БЫСТРОЕ РАСПРОСТРАНЕНИЕ 79 BOORT-YANDO RD BOORT SVNW 214 J15 (475017) AFPR CBORT CYAND F190400036

Текущее регулярное выражение: (@@) (ALERT) \ s (\ w +) \ s (\ S +) (C1 | C3) \ s (. +) \ S (\ d + | \ d + KM | \ d + M | CNR |БЛИЖАЙШИЙ | СЛЕДУЮЩАЯ | СЛЕДУЮЩАЯ | ЗАДНЯЯ | ЗА | ПОСЛЕ | ПОЗАД | ЗАДНЯЯ / ЗАДНЯЯ ЧАСТЬ) \ s (. +) \ S (SVNW) \ s (\ d +) \ s (\ w \ d +) \ s ((\ d +)) \ s (F | AF | FP | AFP | AFPR | AFPRS) \ s (C \ w +) \ s (F \ d +)

Жирным шрифтом выделен разделраздел, который я хочу повторить 1 или много раз.

Спасибо

1 Ответ

0 голосов
/ 01 мая 2019

Вы можете использовать ((C\w+)\s)+, чтобы иметь хотя бы одну подходящую группу, но также захватить и следующие.

Вам также необходимо экранировать круглые скобки вашего сообщения с помощью \( и \) (зарезервированные символы)

Полное регулярное выражение:

(@@)(ALERT)\s(\w+)\s(\S+)(C1|C3)\s(.+)\s(\d+|\d+KM|\d+ M|CNR|NEAR|NEXT TO|ADJACENT|BEHIND|ACROSS FROM|ACROSS|REAR OF|REAR|OUTSIDE)\s(.+)\s(SVNW)\s(\d+)\s(\w\d+)\s(\(\d+\))\s(F|AF|FP|AFP|AFPR|AFPRS)\s((C\w+)\s)+(F\d+)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...