web-dev-qa-db-fra.com

Comment utiliser RegEx dans Dart?

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
13
NatoBoram

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
17
Cetin Basoz

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.

Exemples

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 .

3
Suragch