在模式中找不到正则表达式 Select 组
Regex Select groups not found in a pattern
我一直在 SO 上查看有关 Regex 的各种主题,他们都说要找到反转(select 所有 不 适合条件)您只需使用 [^]
语法或否定前瞻。
我已经尝试在我的 Regex 上使用这两种方法,但结果并不充分,[^]
尤其是似乎从字面上理解了所有内容(即使在转义时也是如此)。
我需要这个做什么:
我有一个巨大的 SQL 行和一个 SQL 转储 我正在尝试删除所有不是行 ID 的字符,以及一列的数值。
我的正则表达式可以准确匹配我正在寻找的内容;我需要做的是 反转 这个匹配项,这样我就可以删除 IDE 中所有 不匹配的 部分。
我的正则表达式:
/(\),\(\d{1,4},)|(,\d{10},)/
这匹配“),(<number upto 4 digits>,
”或“,<number of ten digits>,
”。
主题
我的主题是 SQL 转储的 500Kb 行,看起来像这样(我已经在之前的简单 find/replaces 中删除了 a-z 和其他不需要的字符):
),(39,' ',1,'01761472100','@','9 ','20',1237213277,0,1237215419,''),(40,' ',3,'01445731203','@',' ','-','22 2','210410//816',1237225423,0,1484651768,''),(4270,' /
我的目标是使用正则表达式实现以下输出:
),(39,,1237213277,,1237215419,),(40,,1237225423,,1484651768,),(4270,
然后我可以重新检查并轻松删除重复项,例如逗号。
我已阅读 that Negation in Regex is tricky,那么,使我制作的正则表达式倒转的语法是什么?要删除所有不匹配的组?您可以推荐什么方法来解决这个问题,而无需花费数小时手动阅读这些行?
您可以使用 PCRE 中非常有用的 (*SKIP)(?!)
(=(*SKIP)(*F)
或 (*SKIP)(*FAIL)
)构造来匹配您知道的这些文本,然后跳过并匹配所有其他文本以删除:
/(?:\),\(\d{1,4},|,\d{10},)(*SKIP)(?!)|./s
详情:
(?:\),\(\d{1,4},|,\d{10},)
- 匹配 2 个选项中的 1 个:
\),\(\d{1,4},
- ),(
,然后是 1 到 4 位数字,然后是 ,
|
- 或
,\d{10},
- 一个逗号,10位数字,一个逗号
(*SKIP)(?!)
- 省略匹配的文本并继续下一个匹配
|
- 或
.
- 任何字符(因为 /s
DOTALL 修饰符被传递给正则表达式)
同样可以用
/(\),\(\d{1,4},|,\d{10},)?./s
并替换为
反向引用(因为我们需要放回使用我们需要保留的模式捕获的文本),请参阅 another regex demo。
我一直在 SO 上查看有关 Regex 的各种主题,他们都说要找到反转(select 所有 不 适合条件)您只需使用 [^]
语法或否定前瞻。
我已经尝试在我的 Regex 上使用这两种方法,但结果并不充分,[^]
尤其是似乎从字面上理解了所有内容(即使在转义时也是如此)。
我需要这个做什么:
我有一个巨大的 SQL 行和一个 SQL 转储 我正在尝试删除所有不是行 ID 的字符,以及一列的数值。
我的正则表达式可以准确匹配我正在寻找的内容;我需要做的是 反转 这个匹配项,这样我就可以删除 IDE 中所有 不匹配的 部分。
我的正则表达式:
/(\),\(\d{1,4},)|(,\d{10},)/
这匹配“),(<number upto 4 digits>,
”或“,<number of ten digits>,
”。
主题
我的主题是 SQL 转储的 500Kb 行,看起来像这样(我已经在之前的简单 find/replaces 中删除了 a-z 和其他不需要的字符):
),(39,' ',1,'01761472100','@','9 ','20',1237213277,0,1237215419,''),(40,' ',3,'01445731203','@',' ','-','22 2','210410//816',1237225423,0,1484651768,''),(4270,' /
我的目标是使用正则表达式实现以下输出:
),(39,,1237213277,,1237215419,),(40,,1237225423,,1484651768,),(4270,
然后我可以重新检查并轻松删除重复项,例如逗号。
我已阅读 that Negation in Regex is tricky,那么,使我制作的正则表达式倒转的语法是什么?要删除所有不匹配的组?您可以推荐什么方法来解决这个问题,而无需花费数小时手动阅读这些行?
您可以使用 PCRE 中非常有用的 (*SKIP)(?!)
(=(*SKIP)(*F)
或 (*SKIP)(*FAIL)
)构造来匹配您知道的这些文本,然后跳过并匹配所有其他文本以删除:
/(?:\),\(\d{1,4},|,\d{10},)(*SKIP)(?!)|./s
详情:
(?:\),\(\d{1,4},|,\d{10},)
- 匹配 2 个选项中的 1 个:\),\(\d{1,4},
-),(
,然后是 1 到 4 位数字,然后是,
|
- 或,\d{10},
- 一个逗号,10位数字,一个逗号
(*SKIP)(?!)
- 省略匹配的文本并继续下一个匹配|
- 或.
- 任何字符(因为/s
DOTALL 修饰符被传递给正则表达式)
同样可以用
/(\),\(\d{1,4},|,\d{10},)?./s
并替换为 反向引用(因为我们需要放回使用我们需要保留的模式捕获的文本),请参阅 another regex demo。