Dans une application Flutter, je dois vérifier si une chaîne correspond à un RegEx spécifique. Cependant, le RegEx I copié à partir de la version JavaScript de l'application renvoie toujours à false dans l'application Flutter. J'ai vérifié sur regexr que le RegEx est valide et que ce même RegEx est déjà utilisé dans l'application JavaScript, il devrait donc être correct.
Toute aide est appréciée!
RegEx: /^WS{1,2}:\/\/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:56789/i
Code de test:
RegExp regExp = new RegExp(
r"/^WS{1,2}:\/\/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:56789/i",
caseSensitive: false,
multiLine: false,
);
print("allMatches : "+regExp.allMatches("WS://127.0.0.1:56789").toString());
print("firstMatch : "+regExp.firstMatch("WS://127.0.0.1:56789").toString());
print("hasMatch : "+regExp.hasMatch("WS://127.0.0.1:56789").toString());
print("stringMatch : "+regExp.stringMatch("WS://127.0.0.1:56789").toString());
Sortie:
allMatches : ()
firstMatch : null
hasMatch : false
stringMatch : null
Je pense que vous avez essayé d'inclure des options dans la chaîne d'expression brute alors que vous l'avez déjà en tant que paramètres de RegEx (/ i pour l'insensibilité à la casse est déclarée en tant que caseSensitive: false).
// Removed /i at the end
// Removed / in front - Thanks to Günter for warning
RegExp regExp = new RegExp(
r"^WS{1,2}:\/\/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:56789",
caseSensitive: false,
multiLine: false,
);
print("allMatches : "+regExp.allMatches("WS://127.0.0.1:56789").toString());
print("firstMatch : "+regExp.firstMatch("WS://127.0.0.1:56789").toString());
print("hasMatch : "+regExp.hasMatch("WS://127.0.0.1:56789").toString());
print("stringMatch : "+regExp.stringMatch("WS://127.0.0.1:56789").toString());
Donne:
allMatches : (Instance of '_MatchImplementation')
firstMatch : Instance of '_MatchImplementation'
hasMatch : true
stringMatch : WS://127.0.0.1:56789
C'est une réponse plus générale pour les futurs téléspectateurs.
Regex dans Dart fonctionne beaucoup comme les autres langues. Vous utilisez la classe RegExp
pour définir un motif correspondant. Ensuite, utilisez hasMatch()
pour tester le motif sur une chaîne.
Alphanumérique
final alphanumeric = RegExp(r'^[a-zA-Z0-9]+$');
alphanumeric.hasMatch('abc123'); // true
alphanumeric.hasMatch('abc123%'); // false
Couleurs Hex
RegExp hexColor = RegExp(r'^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$');
hexColor.hasMatch('#3b5'); // true
hexColor.hasMatch('#FF7723'); // true
hexColor.hasMatch('#000000z'); // false
Extraire du texte
final myString = '25F8..25FF ; Common # Sm [8] UPPER LEFT TRIANGLE';
// find a variable length hex value at the beginning of the line
final regexp = RegExp(r'^[0-9a-fA-F]+');
// find the first match though you could also do `allMatches`
final match = regexp.firstMatch(myString);
// group(0) is the full matched text
// if your regex had groups (using parentheses) then you could get the
// text from them by using group(1), group(2), etc.
final matchedText = match.group(0); // 25F8
Il y a quelques exemples supplémentaires ici .