Perl - Как применить отрицательный lookbehing / lookahead на шаблон? - PullRequest
0 голосов
/ 27 апреля 2018

У меня проблема с реализацией моего регулярного выражения. Ниже строка:

my $substitute = q(lalalla = 10..32:1
[thrdddholds]
bbbb = "40..45:1"
cccc = 2..10:5
eqaeaeaea = 5

[bss]
Tad1=3
Nbdfas43p =1..30:1
NbDe524v_1231n= 1);

Замена по шаблону:

if ($substitute =~ /(?:(?:[\d-\.]+[, ]+)+[\d-\.]+)|([-\d+\.]*\.\.[-\d+\.]*:[-\d+\.]*)/) {
  if ($substitute !~ /(")(?:(?:[\d-\.]+[, ]+)+[\d-\.]+)(")/g) {
  $substitute =~ s/([-\d+\.]*\.\.[-\d+\.]*:[-\d+\.]*)/"\1"/g;
  }
}

Мой результат

lalalla = "10..32:1"

[thrdddholds]
bbbb = ""40..45:1""
cccc = "2..10:5"
eqaeaeaea = 5

[bss]
Tad1=3
Nbdfas43p ="1..30:1"
NbDe524v_1231n= 1

Проблема в строке bbbb = ""40..45:1"" вместо "" должно быть ", поэтому фиксированная линия должна выглядеть следующим образом: bbbb = "40..45:1"

Весь ожидаемый результат:

lalalla = "10..32:1"

[thrdddholds]
bbbb = "40..45:1"
cccc = "2..10:5"
eqaeaeaea = 5

[bss]
Tad1=3
Nbdfas43p ="1..30:1"
NbDe524v_1231n= 1

Как этого добиться? Я пробовал с отрицательным взглядом вперед и назад, но он работает только на одном символе, а не на всей строке.

1 Ответ

0 голосов
/ 27 апреля 2018

Попробуйте Regex:

"*(\d+\.\.\d+(?::\d+)*)"*

с заменой на:

"\1"

Демо

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