Можно ли сопоставить строку в начале строки, но захватить конец только регулярным выражением? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть текст, подобный следующему:

[G&]120948103471390857102349871[002]
[A&]512903451029349012390409232[002]
[2&]512903451029349012390409232[002]

Я бы хотел сопоставить только [002] первой строки, которая начинается с [G &], но больше ничего.

Он должен использоваться при "совпадении синтаксиса" для подсветки синтаксиса vim.

Ответы [ 3 ]

0 голосов
/ 15 апреля 2020

Возможно, вы ищете перспективу

^(?=\[G&\]).+(\[\d+\])\s*$

См. рабочую демонстрацию на regex101.com. Кроме того, у вас есть пробелы в демо-строке, они предназначены?

0 голосов
/ 15 апреля 2020

После длительного поиска я обнаружил, что vim regex имеет другой взгляд / взгляд назад.

Вот он:

\(G&.*\)\@<=\(\[\d\d\d\]$\)
0 голосов
/ 15 апреля 2020

Следующие действия помогут вам:

\[G&].*(\[.*])

Вот демо.

Бит «[002]» будет доступен в первом захвате группа регулярного выражения.

Объясняя каждый член в регулярном выражении по очереди:

  • \[G&] - нам нужно экранировать открытие [, потому что это специальный символ в регулярные выражения, затем мы сопоставляем символ G, за которым следуют символы & и ].
  • .* - ноль или более любых других символов.
  • (\[.*]) - мы сопоставляем открывающую квадратную скобку (снова экранированную) \[, за которой следует ноль или более любых других символов .*, за которыми следует закрывающая квадратная скобка ]. Это мы заключены в скобки, чтобы указать, что мы хотим захватить группу .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...