How to use RegEx in Dart?

后端 未结 2 948
说谎
说谎 2020-12-03 04:40

In a Flutter application, I need to check if a string matches a specific RegEx. However, the RegEx I copied from the JavaScript version of the app always returns fa

相关标签:
2条回答
  • 2020-12-03 05:01

    This is a more general answer for future viewers.

    Regex in Dart works much like other languages. You use the RegExp class to define a matching pattern. Then use hasMatch() to test the pattern on a string.

    Examples

    Alphanumeric

    final alphanumeric = RegExp(r'^[a-zA-Z0-9]+$');
    alphanumeric.hasMatch('abc123');  // true
    alphanumeric.hasMatch('abc123%'); // false
    

    Hex colors

    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
    

    Extracting text

    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
    

    There are some more examples here.

    0 讨论(0)
  • 2020-12-03 05:08

    I think you tried to include options in the raw expression string while you already have it as parameters to RegEx ( /i for case insensitivity is declared as 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());
    

    Gives:

    allMatches : (Instance of '_MatchImplementation')
    firstMatch : Instance of '_MatchImplementation'
    hasMatch : true
    stringMatch : WS://127.0.0.1:56789
    
    0 讨论(0)
提交回复
热议问题