Фильтр регулярных выражений Поиск новой строки

Мне нужно отфильтровать запрос из журнала, и он должен искать новые строки, и я застрял в регулярном выражении фильтрации новых строк

вот пример журнала, который я хочу отфильтровать

      139 Connect   root@localhost as anonymous on 
      139 Query SET CHARACTER SET 'utf8mb4'
      139 Query SET collation_connection = 'utf8mb4_unicode_ci'
      139 Query SELECT CURRENT_USER()
      139 Query FLUSH PRIVILEGES
      139 Query SELECT * FROM `mysql`.`db` LIMIT 1
      139 Query DELETE FROM `mysql`.`db` WHERE `host` = "" AND `Db` = "" AND `User` = "" LIMIT 1
      139 Query INSERT INTO `mysql`.`db`(`host`, `Db`, `User`) VALUES("pma_test_host", "mysql", "pma_test_user")
      139 Query DELETE FROM `mysql`.`db` WHERE host = "pma_test_host" AND Db = "mysql" AND User = "pma_test_user" LIMIT 1
      139 Query UPDATE `mysql`.`db` SET `host` = "" WHERE `host` = "" AND `Db` = "" AND `User` = "" LIMIT 1

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

(?=Query).*

но результат поиска только в строке

Query   SET CHARACTER SET 'utf8mb4'

потому что я использую символ "." в регулярных выражениях, которые означают, что не делать поиск в новой строке. Я пытался поставить "\n" несколькими способами, но это не работает. Мне нужно предложение, чтобы получить такой результат:

Query   SET CHARACTER SET 'utf8mb4'
          139 Query SET collation_connection = 'utf8mb4_unicode_ci'
          139 Query SELECT CURRENT_USER()
          139 Query FLUSH PRIVILEGES
          139 Query SELECT * FROM `mysql`.`db` LIMIT 1
          139 Query DELETE FROM `mysql`.`db` WHERE `host` = "" AND `Db` = "" AND `User` = "" LIMIT 1
          139 Query INSERT INTO `mysql`.`db`(`host`, `Db`, `User`) VALUES("pma_test_host", "mysql", "pma_test_user")
          139 Query DELETE FROM `mysql`.`db` WHERE host = "pma_test_host" AND Db = "mysql" AND User = "pma_test_user" LIMIT 1
          139 Query UPDATE `mysql`.`db` SET `host` = "" WHERE `host` = "" AND `Db` = "" AND `User` = "" LIMIT 1

1 ответ

Решение

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

(?=Query)[\s\S]*

Он проверит, есть ли Query непосредственно слева от текущего местоположения, а затем будет использовать (поместит в значение совпадения) любые 0+ символов (включая разрывы строк).

Другие вопросы по тегам