Использование регулярных выражений для поиска строк между другими строками и до новой строки - PullRequest
1 голос
/ 21 января 2020

Вот пример текста, с которым я работаю:

Nmap scan report for XYZ\n

blah blah blah\n
blah blah blah\n
blah blah blah\n
data: here\n\n

Как мне захватить все, начиная с (включая) Nmap scan вплоть до строки, содержащей data до конца этой линии? Текст после data изменяется, поэтому мне нужно сканировать до data и до конца этой строки.

Я пытался:

.scan(/Nmap scan.*?data.*?/m)[1]

, но это захватывает все от Nmap scan до слова data. Я думал, что .*? после слова data будет означать «захватить все» и после этой строки. Не повезло.

Также попытался (?ms)^Nmap.*?\ndata:[^\n]*, но не повезло, как показано ниже:

2.5.1 :192 > puts evidence.scan(/(?ms)^Nmap.*?\ndata:[^\n]*/)
Traceback (most recent call last):
SyntaxError ((irb):192: undefined group option: /(?ms)^Nmap.*?\ndata:[^\n]*/)

Ответы [ 2 ]

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

Преобразование моего комментария в ответ, чтобы решение было легко найти для будущих посетителей.

В Ruby вы можете использовать это:

/Nmap.*?\ndata:[^\n]*/m

Ruby RegEx Демо

m позволяет механизму регулярных выражений сопоставлять новую строку с точкой в ​​Ruby, которая обычно называется DOTALL в других разновидностях регулярных выражений.

0 голосов
/ 21 января 2020

Вы не указали, какой язык вы используете. Это нотация JavaScript, но она легко может быть переведена практически на любой движок регулярных выражений:

/^Nmap.*?^data:.*?$/ms

См. Демонстрацию RegEx

  1. '^' Соответствует началу строка или начало строки.
  2. Nmap Соответствует «Nmap».
  3. .?* Минимально соответствует любому символу (включая символ новой строки) до следующего соответствия.
  4. data: Соответствует «data:».
  5. .?* Минимально соответствует любому символу до следующего соответствия.
  6. $ Соответствует концу строки или концу строки.

Я предполагаю, что Nmap и data: должны начинаться в начале строки и, следовательно, добавленные проверки.

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