Je mets à jour un code que je n'ai pas écrit et une partie de celui-ci est une expression régulière comme suit:
[url(?:s*)]www.(.*?)[/url(?:s*)]
Je comprends que .*? fait une correspondance non gourmande de tout dans le deuxième registre.
Que fait?: S * dans les premier et troisième registres?
Mettre à jour: Comme demandé, le langage est C # sur .NET 3.5
Réponses:
9 pour la réponse № 1La syntaxe (?:)
est un moyen de mettre des parenthèses autour d'une sous-expression sans pour autant extraire séparément cette partie de la chaîne.
L'auteur voulait faire correspondre le (.*?)
partie au milieu, et ne voulait pas que les espaces au début ou à la fin ne gênent. Maintenant, vous pouvez utiliser 1
ou $1
(ou quelle que soit la méthode appropriée dans votre langue particulière) pour faire référence au nom de domaine, au lieu du premier bloc d'espaces au début de la chaîne
4 pour la réponse № 2
?: rend les parenthèses non groupées. Dans cette expression régulière, vous ne retirerez qu'une seule information, $ 1, qui contient l'expression du milieu (. *?).
2 pour la réponse № 3
Que fait?: S * dans les premier et troisième registres?
Il correspond à zéro ou plusieurs espaces, sans les capturer.
L'auteur de l'expression régulière a l'intention d'autoriser la fin des espaces blancs dans les balises entre crochets, correspondant à toutes les étiquettes DNS suivant le "www". ainsi:
[url]www.foo.com[/url] # foo.com
[url ]www.foo.com[/url ] # same
[url ]www.foo.com[/url] # same
[url]www.foo.com[/url ] # same
Notez que l'expression régulière correspond également à:
[url]www.[/url] # empty string!
et ne correspond pas
[url]stackoverflow.com[/url] # no match, bummer
1 pour la réponse № 4
Vous pouvez trouver ce cheat feuille d'expressions régulièrestrès utile (j'espère). J'ai passé des siècles à essayer d'apprendre Regex sans chance. Et une fois que j'ai lu cette feuille de triche - j'ai immédiatement compris ce que je n'avais pas appris auparavant.
http://krijnhoetmer.nl/stuff/regex/cheat-sheet/