捕获时限制正面前瞻

Restricting Positive Lookahead when capturing

我每隔一段时间从流中获取一些文本,例如,

ICY Info: StreamTitle='Elvis Presley - Saved';StreamUrl='';

ICY Info: StreamTitle='Elvis Presley - Saved'

ICY Info: StreamTitle='Ivank'av T'ali - Yorua';StreamUrl='';

ICY Info: StreamTitle='Ivank'av T'ali - Yorua'

我想获得

Elvis Presley - Saved
Elvis Presley - Saved
Ivank'av T'ali - Yorua
Ivank'av T'ali - Yorua

我正在使用 (?<=\=\').*(?=';S)(?<=\=\').*(?='),但它们似乎不合适。

Demo

@Edit:我刚刚带着 (?<=\=\').*?(?=';) 来了。

';S 不存在时,

(?=';S) 将不适用于第一个和第三个示例。

另一方面(?=')在第一个和第三个例子中会匹配太多。

您可以做的是在前瞻中使用交替来检查 ;:' 后跟字符串的结尾。

(?<==').+?(?='(?:;|$))

Regex demo

说明

  • (?<==') 正面回顾断言左边的是 ='
  • .+? 非贪婪匹配任意字符一次或多次
  • (?= 正面前瞻断言右边的是
    • '(?:;|$) 匹配 ' 后跟一个交替匹配 ; 或断言字符串结尾 $
  • ) 关闭正面前瞻