Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 关键字后的正则表达式分组_Regex_Regex Group - Fatal编程技术网

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很高兴它有帮助!