Я не вижу здесь никакой необходимости смотреть вперед или смотреть назад; просто сопоставьте весь элемент <span>
и используйте группу захвата, чтобы извлечь его содержимое. Предполагая, что никогда не будет элементов <span>
внутри того, который вы подходите, это все, что вам нужно:
Regex rgx = new Regex(
@"<span\s+class=""synopsis-view-synopsis"">(.*?)</span>",
RegexOptions.IgnoreCase | RegexOptions.Singleline);
foreach (Match m in rgx.Matches(s0))
{
Console.WriteLine(m.Groups[1].Value);
}
Кроме того, [^<\/span><]+
не делает то, о чем вы, вероятно, думаете. У вас есть класс символов , который соответствует любому одному символу, кроме <
, /
, s
, p
, a
, n
или >
, Возможно, вы пытались это сделать:
(?:(?!</span>).)+
... который соответствует одному символу за раз, после . Взгляд в будущее подтверждает, что символ не является началом последовательности </span>
. Это правильная техника, но (как и в случае с внешностью), я не думаю, что вам здесь нужно что-то настолько необычное.