J'utilise C # et je veux capturer testez-le ici Motif: p > Résultat expiré IP: PORT
avec Regex mais comment le faire ne pas correspondre si après PORT
le caractère est : code>?
1.22.234.255:8181:u:p // true, it should be false
1.22.234.255:80 // true
1.22.234.255 8080 // true
dddd1.22.234.255 80808 // true
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[:\s]+(\d{2,5})(?!:)
3 Réponses :
Essayez d'utiliser deux expressions régulières différentes, ce sera plus simple
Expression 1 pour les espaces:
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\:(\d{2,5})$
Expression 2 sans espaces, vous devez vous assurer qu'elle a une fin de vie caractère ou / m modificateur si vous avez plusieurs lignes:
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\d{2,5})
Correspond à l'un des deux et fusionne les résultats.
merci, c'est une chaîne aléatoire Je ne peux pas utiliser ^ $
car la valeur pourrait être au milieu et le séparateur devrait être deux points ou un espace [: \ s]
Le problème est que votre expression de port Une façon de compenser cela est de changer votre modèle pour rejeter les deux-points et les chiffres : (\ d {2,5})
ne saisit pas tous les chiffres. Dans l'expression qui passe de manière inattendue, si vous regardez les groupes de correspondance, ils sont 1.22.234.255
et 818
( pas 8181 ). L'expression rejette
1.22.234.255:8181
car elle est suivie d'un :
, mais considère alors un port à 3 chiffres et accepte 1.22.234.255:818
car le caractère suivant est un 1
et non un :
. (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[:\s]+(\d{2,5})(?![0-9:])
Cette expression régulière fonctionne pour tous les cas
(\ d {1,3} \. \ d {1,3} \. \ d {1,3} \. \ d {1,3} ) \ s * (? :: \ s *)? (?
https://regex101.com/r/5faUcx/1
Version lisible
( # (1 start), IP \d{1,3} \. \d{1,3} \. \d{1,3} \. \d{1,3} ) # (1 end) \s* (?: : \s* )? (?<! \d ) ( \d{2,5} ) # (2), Port (?! \d | \s* : )
essayez-vous de faire correspondre les adresses IP?
oui, mais ce n'est pas le problème, il n'a pas besoin d'être une adresse IP valide
Jetez un œil à < code> IPAddress.TryParse () , au lieu d'un Regex
Jetez également un œil à cette question
Je ne valide pas l'adresse IP mais je capture
IP: PORT
à partir d'une chaîne aléatoireCette partie
[: \ s] +
correspond à ceci:::::: :::: ::::::::::::::::::: :::::::: ::
@sln la chaîne est une liste de proxy et copiée à partir de la page Web, 99,99% il n'y aura pas de telle chaîne: D
@cieunteung - Ce n'est pas une bonne forme de dire à 99,99%, comme sans plomb?