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上不起作用。如果比较一下,最后一种方法当然比第一种好,因为它们是两种不同的方法。