Dart:RegExp示例

时间:2014-01-03 21:35:13

标签: regex dart string-matching

我正在尝试将我的Dart Web应用程序设置为:(1)确定特定字符串是否与给定的正则表达式匹配,以及(2)如果匹配,则从字符串中提取组/段。

具体来说,我想确保给定的字符串具有以下形式:

http://myapp.example.com/#<string-of-1-or-more-chars>[?param1=1&param2=2]

<string-of-1-or-more-chars>就是这样:任何1个字符的字符串,以及查询字符串([?param1=1&param2=2]可选的位置。

所以:

  1. 确定字符串是否与正则表达式匹配;如果是的话
  2. 从字符串
  3. 中提取<string-of-1-or-more-chars>组/句段

    这是我最好的尝试:

    String testURL = "http://myapp.example.com/#fizz?a=1";
    String regex = "^http://myapp.example.com/#.+(\?)+\$";
    RegExp regexp= new RegExp(regex);
    Iterable<Match> matches = regexp.allMatches(regex);
    String viewName = null;
    if(matches.length == 0) {
        // testURL didn't match regex; throw error.
    } else {
        // It matched, now extract "fizz" from testURL...
        viewName = ??? // (ex: matches.group(2)), etc.
    }
    

    在上面的代码中,我知道我正在使用RegExp API错误(我甚至没有在任何地方使用testURL),除此之外,我不知道如何使用RegExp API来提取(在这种情况下)URL中的“fizz”段/组。

3 个答案:

答案 0 :(得分:5)

试试这个正则表达式:

String regex = "^http://myapp.example.com/#([^?]+)";

然后抓住:matches.group(1)

答案 1 :(得分:4)

RegExp类为单个匹配提供了一种便捷方法:

RegExp regExp = new RegExp(r"^http://myapp.example.com/#([^?]+)");
var match = regExp.firstMatch("http://myapp.example.com/#fizz?a=1");
print(match[1]);

注意:我使用了anubhava的正则表达式(你的正确表达式没有?)

注意2:尽管这里没有必要,但通常使用原始字符串作为正则表达式是个好主意,因为你不需要在它们中转义$和\。有时使用三引号原始字符串也很方便:new RegExp(r"""some'weird"regexp\$""")

答案 2 :(得分:0)

String regex = "^http://myapp.example.com/#([^?]+)";

然后:

var match = matches.elementAt(0);
print("${match.group(1)}"); // output : fizz