regex - 正则表达式在两个边界之间查找字符串
问题描述
我找到了许多类似问题的答案,但没有一个能解决我的问题。
我试着解释一下:我有 mysql 通用日志生成的日志文件,我想过滤在某个表上触发的查询。我正在尝试通过 grep 和正则表达式来做到这一点。
每个条目都以双标签开头。所以我启用了multiline和dotall并尝试通过积极的后视和积极的前瞻来获取条目(?<=\t\t).*?(?=\t\t|\Z)
。到目前为止,这是有效的,也适用于分布在多行上的查询。我不能做的是只过滤掉某个表的条目(表名:s_order)。
(?<=\t\t).*?s_order.*?(?=\t\t|\Z)
不管用。这似乎是合乎逻辑的,因为中间的匹配模式包括表名之前的任何类型的字符以及它之后的任何类型。但我想不出一个可行的解决方案。
示例:每个 8 位数字前面都有一个双制表符,因此下面粘贴的部分格式不正确。在关键字之后还有一个选项卡,Query, Quit, Connext, ...
例如(tab)(tab)36003847 Query(tab)SELECT count(userid) AS number FROM sys_user WHERE typ = 'admin'
我想要的结果是第 4 行和第 8 到 15 行。
36003847 Query SELECT count(userid) AS number FROM sys_user WHERE typ = 'admin'
36003847 Quit
36003844 Query SELECT * FROM server_php WHERE server_id = 1 AND name = 'PHP 5.4.23' AND php_fpm_init_script = '/etc/init.d/php-5.4.23-fpm'
36003844 Query UPDATE s_order SET php_version = '5.4.23' WHERE server_php_id = '3'
36003848 Connect c1Live@localhost as anonymous on c1LIVE
36003848 Query SET NAMES 'utf8'
36003848 Query SET @@session.sql_mode = ''
36003848 Query SELECT
name, id, name, label,
description, source, active,
installation_date as installationDate,
update_date as updateDate, changes,
version
FROM s_order
WHERE namespace='Core'
36003848 Query SELECT
ce.subscribe as name,
ce.listener,
ce.position,
cp.name as plugin
FROM s_core_subscribes ce
JOIN s_core_plugins cp
ON cp.id=ce.pluginID
AND cp.active=1
AND cp.namespace='Core'
WHERE ce.type=0
ORDER BY name, position
解决方案
推荐阅读
- amazon-web-services - 如何将 Redrive 策略添加到具有加密 DLQ 的 SNS
- python - 如何按位置将变量插入字符串
- oracle - 如何在 PL SQL 中抛出异常?
- c# - 如何从浏览器获取 OAuth2 不记名令牌?
- java - 如何在android中添加截击
- c# - c#正则表达式过滤youtube视频的ID
- linux - 在运行时创建 SPIdev 设备
- jhipster - 当访问类型为 public 的客户端提供时,JWT 是否由 Keycloak 签名?
- php - 在 Laravel 请求中验证数组键
- python - ModuleNotFoundError:没有名为“crispy_forms”的模块