2010-10-24 13 views
0

Impossible de trouver un meilleur titre mais j'ai besoin d'un Regex pour extraire le lien de l'exemple ci-dessous.C# regex pour extraire le lien après =

snip... flashvars.image_url = 'http://domain.com/test.jpg' ..snip 

en supposant que regex est le meilleur moyen.

grâce

+0

J'ai modifié la question pour refléter ce que je pensais être l'intention. Excuses d'avance si je me trompe. –

Répondre

1

Envisagez l'exemple de code suivant. Il montre comment on pourrait extraire de votre chaîne fournie. Mais j'ai élargi sur la chaîne certains. Généralement, l'utilisation de. * Est trop inclusive (comme le montre l'exemple ci-dessous).

Le point principal, est qu'il y a plusieurs façons de faire ce que vous demandez, la première réponse donnée utilise le "look-around" tandis que la seconde suggère l'approche "Groups". Le choix dépend principalement de vos données réelles.

 string[] tests = { 
       @"snip... flashvars.image_url = 'http://domain.com/test.jpg' ..snip", 
       @"snip... flashvars.image_url = 'http://domain.com/test.jpg' flashvars2.image_url = 'http://someother.domain.com/test.jpg'", 
     }; 
     string[] patterns = { 
       @"(?<==\s')[^']*(?=')", 
       @"=\s*'(.*)'", 
       @"=\s*'([^']*)'", 
          }; 
     foreach (string pattern in patterns) 
     { 
      Console.WriteLine(); 
      foreach (string test in tests) 
       foreach (Match m in Regex.Matches(test, pattern)) 
       { 
        if (m.Groups.Count > 1) 
         Console.WriteLine("{0}", m.Groups[1].Value); 
        else 
         Console.WriteLine("{0}", m.Value); 
       } 
     } 
0

Edition: Nouveau regex correspondant à votre question éditée:

Vous devez faire correspondre ce qui est entre guillemets, après une =, non?

@"(?<==\s*')[^']*(?=')" 

devrait faire.

(?<==\s*') affirme qu'il existe un =, suivi éventuellement d'un espace, suivi d'un ', juste avant notre position actuelle (lookbehind positif).

[^']* correspond à un nombre quelconque de caractères non '.

(?=') Affirme que la correspondance s'arrête avant la suivante '.

Cette expression régulière ne vérifie pas s'il y a bien une URL dans ces guillemets. Si vous voulez faire, utilisez

@"(?<==\s*')(?=(?:https?|ftp|mailto)\b)[^']*(?=')" 
0

Un regex simple pour ce serait @"=\s*'(.*)'".