Regex 在asad=之后和下一个&
在asad=之后但在下一个&之前,我如何匹配任何内容 测试字符串: 预期提取: 253485_e1c6ae3ad 252485_c1c63c01 254325_c1c63c01d 204207_E1756D5Regex 在asad=之后和下一个&,regex,Regex,在asad=之后但在下一个&之前,我如何匹配任何内容 测试字符串: 预期提取: 253485_e1c6ae3ad 252485_c1c63c01 254325_c1c63c01d 204207_E1756D5 您需要非贪婪匹配,并且可能需要匹配a&或作为终止符的行尾: /asad=(.*?)(?:&|$)/ 这将告诉正则表达式引擎: 我们正在寻找asad的序列= 然后,捕捉一切直到。。。 我们看到a&或行$的结尾。 如果您使用贪婪匹配。*则它将捕获所有内容,直到无法再匹配终结符 使用测
您需要非贪婪匹配,并且可能需要匹配a&或作为终止符的行尾:
/asad=(.*?)(?:&|$)/
这将告诉正则表达式引擎:
我们正在寻找asad的序列=
然后,捕捉一切直到。。。
我们看到a&或行$的结尾。
如果您使用贪婪匹配。*则它将捕获所有内容,直到无法再匹配终结符
使用测试字符串:
https://teststore.com/collections/men/products/mens-sneakers?variant=310637539&asad=204207_e1c1756d5&foo=bar
贪婪匹配/asad=.*?:&|$/将捕获asad=204207_e1c1756d5&foo=bar,因为它可以在第$行结束前保持贪婪匹配,而非贪婪匹配/asad=.*?:&|$/正好捕获您想要的内容。您可以使用lookahead:
x?=y–正前瞻与后跟“y”的“x”匹配
x?!y–负前瞻与“x”匹配,但后面没有“y”
您还可以使用lookbehinds:
?
这些都是你需要的例子,
如果文本有多行,请使用以下命令:
(?<=asad=).*?(?=(?:&|\n))
或者,如果您有一个包含多个字符串的数组,请使用
(?<=asad=).*?(?=(?:&|$))
示例关于Threak@chris heald你能分享一个regex101示例吗?当我尝试测试时,我没有得到提取的字符串:那里的测试字符串包括分隔符avad,而不是asad。相应地调整测试字符串或匹配器。