Regex 在分隔符之间匹配正则表达式的有效方法
我有一个字符串,希望用正则表达式匹配前两个分隔符之间的子字符串 例如,一个字符串Regex 在分隔符之间匹配正则表达式的有效方法,regex,match,Regex,Match,我有一个字符串,希望用正则表达式匹配前两个分隔符之间的子字符串 例如,一个字符串foo“text”bar和另一个字符串foo“anothertext”和另一个带有分隔符“的字符串应产生文本 我发现了以下可能的解决方案: 非贪婪匹配“(.*?” 使用前向和后向断言的非贪婪匹配(?由于分隔符是单个字符,并且匹配的子字符串不应包含它们,因此否定字符类解决方案(“([^”]*)”)是最有效的 如果只想匹配一次,甚至不需要结束符“:只需使用”([^“]*) 当没有结束分隔符且文本在初始分隔符之后相当大时
foo“text”bar和另一个字符串foo“anothertext”和另一个带有分隔符“
的字符串应产生文本
我发现了以下可能的解决方案:
- 非贪婪匹配
“(.*?”
- 使用前向和后向断言的非贪婪匹配
(?由于分隔符是单个字符,并且匹配的子字符串不应包含它们,因此否定字符类解决方案(“([^”]*)”
)是最有效的
如果只想匹配一次,甚至不需要结束符“
:只需使用”([^“]*)
当没有结束分隔符且文本在初始分隔符之后相当大时,延迟点匹配(“(.*?”
)技术可能会导致性能问题
LookAround几乎总是在每个测试位置检查一些子模式的额外开销。因为这里的分隔符是单个字符,所以这里的lookbehind/lookahead是无效的。只有在无法访问捕获组的情况下,您才希望使用此解决方案。在Python中,捕获工作正常,因此无需使用此解决方案解决方案。JS、PHP、.NET或..@choz我在测试时使用了python。第二种方法在JS上不起作用。如果比较一下,最后一种方法当然比第一种好,因为它们是两种不同的方法。