Ограничение Позитивного Lookahead при захвате - PullRequest
0 голосов
/ 22 сентября 2018

Я получаю некоторый текст с интервалами из потока, например,

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) или (?<=\=\').*(?='), но они, похоже, неподходит.

Демо

@ Редактировать: Я только что пришел с (?<=\=\').*?(?=';).

1 Ответ

0 голосов
/ 22 сентября 2018

(?=';S) не будет работать для первого и третьего примера, когда ';S не существует.

С другой стороны (?=') Слишком много совпадет в первом и третьем примере.

То, что вы можете сделать, это использовать чередование в предвкушении для проверки либо ;:, либо' с последующим концом строки.

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

Regex demo

Пояснение

  • (?<==') Положительный взгляд за утверждением того, что слева: ='
  • .+? Соответствует любому символу один или несколько раз, не жадный
  • (?= Положительныйс нетерпением ожидаем, что справа будет
    • '(?:;|$) Match ' с последующим чередованием, совпадающим либо с ;, либо с утверждением конца строки $
  • ) закрыть позитивный прогноз
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...