以下是我的一些测试案例:
{APIDETAILS=FOO, BAR, SING, RUN, OP1/OPSUB1/RESULT=SOMETHING, OP1/OPSUB2/RESULT=SOMETHING, OP2/OPSUB1/RESULT=SOMETHING}
{APIDETAILS=FOO, OP1/OPSUB1/RESULT=SOMETHING, OP1/OPSUB2/RESULT=SOMETHING, OP2/OPSUB1/RESULT=SOMETHING}
{APIDETAILS=FOO, O.P.OP3/OPSUB1/RESULT=SOMETHING, OP1/OPSUB2/RESULT=SOMETHING, OP2/OPSUB1/RESULT=SOMETHING}
{APIDETAILS=FOO, OP.PO.OP4/OPSUB1/RESULT=SOMETHING, OP1/OPSUB2/RESULT=SOMETHING, OP2/OPSUB1/RESULT=SOMETHING}
{OP1/OPSUB1/RESULT=SOMETHING, OP1/OPSUB2/RESULT=SOMETHING, OP2/OPSUB1/RESULT=SOMETHING, APIDETAILS=FOO}
{OP1/OPSUB1/RESULT=SOMETHING, OP1/OPSUB2/RESULT=SOMETHING, OP2/OPSUB1/RESULT=SOMETHING, APIDETAILS=FOO, SING, BAR}
{OP1/OPSUB1/RESULT=SOMETHING, OP1/OPSUB2/RESULT=SOMETHING, OP2/OPSUB1/RESULT=SOMETHING, APIDETAILS=FOO, BAR, SING
注意:'}'故意遗漏在最后一行。
我想要匹配的内容: 一切都遵循APIDETAILS,但直到APIDETAILS结束。结果如果没有明确定义(针对不同场景寻找上述测试用例)
我提出了正则表达式:
(?:APIDETAILS=)(.*?)(?:}|\/|$)
我能够匹配的内容:
问题:如何摆脱上述比赛1,2,3,4中的一些噪音,最终只能使用以下内容?
我需要匹配的内容:
答案 0 :(得分:2)
答案 1 :(得分:2)
使用此:
(?m)(?<=APIDETAILS=).*?(?=,\s*\S+=|}|$)
查看 the regex demo 中的匹配项。
(?m)
启用了多行模式,允许^
和$
在每一行匹配(?<=APIDETAILS=)
声称前面的内容是APIDETAILS=
.*?
懒惰地将字符匹配到...... (?=,\s*\S+=|}|$)
可以断言后面的内容是逗号后跟可选空格,非空格字符和=
,或|
}
字符或者行$