Regex 关键字后的正则表达式分组
我被一个正则表达式问题困住了。 示例文本Regex 关键字后的正则表达式分组,regex,regex-group,Regex,Regex Group,我被一个正则表达式问题困住了。 示例文本 data-key=foo1, data-key=foo2, data-key=foo3, BAR, data-key=foo4, asd data-key=foo5, asfda data-key=foo6, 我现在希望所有的数据键行在单词“BAR”之后。 预期结果: data-key=foo4, data-key=foo5, data-key=foo6, 这个正则表达式会给出我想要的结果,但我不想指定数据键行出现的次数,因为它可以是任意数字: (?
data-key=foo1,
data-key=foo2,
data-key=foo3,
BAR,
data-key=foo4,
asd
data-key=foo5,
asfda
data-key=foo6,
我现在希望所有的数据键行在单词“BAR”之后。
预期结果:
data-key=foo4,
data-key=foo5,
data-key=foo6,
这个正则表达式会给出我想要的结果,但我不想指定数据键行出现的次数,因为它可以是任意数字:
(?s)BAR.*(data-key.*?,).*(data-key.*?,).*(data-key.*?,)
有什么想法吗?除非你问这个问题是出于理论上的原因,否则我建议通过
BAR
分割你的输入,然后对输入之后的所有内容执行regexp:
var str=“数据键=foo1、\n数据键=foo2、\n数据键=foo3、\n数据键=foo4、\n数据键=foo5、\n数据键=foo6”;
var regex=/(?:数据键=([^,]*)/ig;
var matches=Array.from(str.split(“BAR”)[1].matchAll(regex));
console.log(匹配项)代码>具有任何正则表达式风格,至少支持检查BAR
不在前面
(data-key[^,\n]*,).*(?![\s\S]*?\nBAR)
(使用a提取零件直到逗号)
如果使用PCRE,则可以跳过某些部分
(?m)(?s:\A.*?^BAR)(*SKIP)(*F)|^data-key.*?,
- 对于多行模式,使插入符号匹配行开始和美元行结束
\A
匹配字符串的开头
(?s:
使用dotall标志启动非捕获组以生成匹配的换行符
您在中使用的是什么语言或工具?如果您的正则表达式引擎支持可变宽度lookbehinds(注意:很少有引擎支持),您可以使用(?在您实际希望提取的行之间是否始终只有一行垃圾行?@anubhava谢谢:)仍然不完全清楚,如果要匹配到只有逗号或完整行,请进行编辑。OP需要澄清。这正是我想要的!非常感谢!完整行或完整行并不重要,我只是停留在分组上part@RobertNagel很高兴它有帮助!