2017-03-08 1 views
1

Je donne les résultats suivants:Auparavant testé Regex ne fonctionne pas maintenant, mais travaille dans Regex Tester

 var exp = new Regex("(.+):(.+)-(.+)"); 
     var matches = exp.Matches("AR1:CP1-CP2"); 

Quand je vais à http://regexstorm.net/tester cela fonctionne:

enter image description here

Et je suis certain J'avais un code de test qui fonctionnait ... mais maintenant quand je l'exécute dans mon application C# (c'est le code exact ci-dessus), je reçois une seule correspondance, la chaîne d'entrée, et mon code se bloque ensuite.

enter image description here

Je codage aujourd'hui VS 2015 plutôt que VS2013 que j'ai écrit le code avec d'autres, mais que je suis à une perte. Quelqu'un peut-il comprendre cela?

+0

Je suggère de changer le regex '([^:] +): ([^ - ] +) - (. +) 'pour éviter le back-tracking. – dasblinkenlight

Répondre

3

Bien sûr, vous obtenez un seul match. L'expression régulière ne correspond qu'une seule fois. Le match lui-même, cependant, trois groupes (quatre, en comptant tout le match, ce qui est implicitement groupe 0):

PS Home:\> [regex]::matches('AR1:CP1-CP2', '(.+):(.+)-(.+)') 


Groups : {AR1:CP1-CP2, AR1, CP1, CP2} 
Success : True 
Captures : {AR1:CP1-CP2} 
Index : 0 
Length : 11 
Value : AR1:CP1-CP2 
+0

Je suis tellement confus alors comment mon code fonctionnait avant. Sauf si j'ai vraiment des rêves ringards et j'ai rêvé j'ai fini mon code ... mais ça a été vérifié depuis des mois! Bizarre ... –

+0

J'ai toute cette classe dont j'ai de forts souvenirs de test mais ça ne marche pas et je ne sais pas ce qui s'est passé ... –

+0

Eh bien, je peux vous assurer que le comportement regex à cet égard n'a pas changer dans n'importe quelle version .NET ;-) – Joey