Преобразование регулярных выражений PHP в c #

У меня есть это регулярное выражение:

<DIV(?:(?!</DIV>).)*?"(http://www\.foo\.com(?:\\.|[^"\\])*)" 

И я пытаюсь использовать его с помощью c #:

  @"<DIV(?:(?!</DIV>).)*?""(http://www\.foo\.com(?:\\.|[^""\\])*)""" 

Но это выводит каждую вещь из <DIV вперед, я хочу, чтобы она просто отображалась внутри ""

Подобно действительному регулярному выражению

Поскольку вы используете группы захвата (группы между парой круглых скобок () ), вам нужно будет использовать Groups[#] чтобы получить разные части группы захвата. Groups[1] будут иметь значение первой группы захвата.

Если вы используете:

 @"<DIV(?:(?!</DIV>).)*?""(http://www\.foo\.com(?:\\.|[^""\\])*)""" 

Вы получите их между " с помощью Groups[1].Value и все совпадения в Groups[0].Value .

Пример:

 @"a(b(cd)(ef))" 

Здесь у вас есть 3 группы захвата, потому что есть 3 пары круглых скобок. После матча, и если вы используете:

 Console.WriteLine(match.Groups[0].Value); Console.WriteLine(match.Groups[1].Value); Console.WriteLine(match.Groups[2].Value); Console.WriteLine(match.Groups[3].Value); 

Вы получаете:

 abcdef bcdef cd ef 

Если это немного запутанно, может быть, это разбиение может помочь:

 a(b(cd)(ef)) 1 2 3 ^--|^--| ^---------| 

Числа и ^ указывают начало групп захвата.

 string str = "<DIV src=\"http://www.foo.com\"></DIV>"; Regex re = new Regex(@"<DIV(?:(?!<\/DIV>).)*?\""(http:\/\/www\.foo\.com(?:\\.|[^\""\\])*)\"""); // or Regex re = new Regex(@"<DIV(?:(?!</DIV>).)*?""(http://www\.foo\.com(?:\\.|[^""\\])*)"""); Match match = re.Match(str); Console.Write(match.Groups[1]); // Returns "http://www.foo.com"