Проблема в сопоставлении строки с регулярным выражением awk - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь найти следующее предложение

ldcValue = 0.00

Регулярное выражение, которое я пытаюсь создать, должно соответствовать:

  • Слева от оператор отношения должен быть переменной, которая начинается с "ld c" в качестве префикса.
  • В середине должен быть оператор отношения "<", ">", "=", "> =", "<=" </li>
  • Справа должна быть переменная, которая начинается с "ld c" в качестве префикса или с числом, подобным "0.0" или "0.0d"

Я пробовал это регулярное выражение:

if(match(line, "/(\<(ldc)\w*)(\t| )+(\=|>|<|>=|<=)\(\t| )*(\<(ldc)\w*)|\w*") > 0){ 
        print "match: "substr($0, RSTART, RLENGTH);
    }

, но не совпадало.

Примеры ввода

ldcValue > 0.00
ldcValue = 0
ldblValue = ad_value / llDias
ldcValue = ad_Value * ldblFator

Ожидаемый выходной результат:

   ldcValue > 0.00
   ldcValue = 0

Что такое правильное регулярное выражение?

Спасибо.

1 Ответ

1 голос
/ 17 января 2020

В Awk ставьте кавычки или косые черты вокруг своего регулярного выражения, но не оба. Ваша текущая попытка требует буквального sla sh перед первым ldc.

Кроме того, традиционный Awk обычно не поддерживает \w, который является расширением Perl.

Try

/\<ldc[A-Za-z0-9_]+[ \t]*([><]=|[<>=])[ \t]*(ldc[A-Za-z0-9_]|[0-9]+(\.[0-9]*)?d?)/

Ваша формулировка проблемы смутно звучит так, будто вам нужен правильный синтаксический анализатор, а не просто регулярное выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...