Пользовательский переводчик - с регулярным выражением - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь проанализировать с помощью регулярного выражения этот код:

IF KNVV -> KDGRP IN( "EK", "ES" )  THEN KNA1-SORTL ="KA"
ELSE KNVV -> KDGRP IN( "EL", "E3", "E5", "E7", "E2", "EF" )  THEN KNA1-SORTL ="IN"
ELSE KNVV -> KDGRP IN( "EX", "EU", "EV", "ET", "EW" )  THEN KNA1-SORTL ="CA"
END

, но я не могу сгенерировать правильное регулярное выражение ...

[ ]*[a-zA-Z0-9]+[ ]*([a-zA-Z0-9]+)[ ]*\-\>[ ]*([a-zA-Z0-9]+)[ ]*IN[ ]*\([ ]*([a-zA-Z0-9 ]+)+[ ]*\)[ ]*THEN[ ]*([a-zA-Z0-9\-]+)[ ]*\=[ ]*([a-zA-Z0-9\"\,]+)[ ]*

Мне нужна проверка в строке и следующие значения для каждой группы:

$1: KNVV
$2: KDGRP
$3: EK,ES
$4: KNA1-SORTL
$5: KA

Есть ли способ получить это?

1 Ответ

0 голосов
/ 04 февраля 2020

Хотя невозможно получить точный вывод EK,ES, вы можете получить что-то вроде "EK", "ES".

Вот регулярное выражение, которое может сделать то, что вы искали.

(?:IF|ELSE) ([A-Z]+) -> ([A-Z]+) IN\(( (?:"[A-Z0-9]{2}"(?:[, ])*)+)\)(?: +)THEN ([A-Z0-9\-]+) ="([A-Z]+)"

Это довольно сложно, поэтому вот наглядное представление о том, что он делает. Regular expression visualization

Это регулярное выражение будет выводить

Полное соответствие IF KNVV -> KDGRP IN( "EK", "ES" ) THEN KNA1-SORTL ="KA"

Группа 1. KNVV
Группа 2. KDGRP
Группа 3. "EK", "ES"
Группа 4. KNA1-SORTL
Группа 5. KA

Вы можете проверить больше случаев по этому регулярному выражению101

...