Regex dart正则表达式匹配并从中获取一些信息
为了练习,我决定构建一个类似于Regex dart正则表达式匹配并从中获取一些信息,regex,dart,Regex,Dart,为了练习,我决定构建一个类似于主干网的路由器。用户只需给出正则表达式字符串,如r'^first/second/third/$”,然后将其挂接到视图中 例如,假设我有这样一个RegExp: String regexString = r'/api/\w+/\d+/'; RegExp regExp = new RegExp(regexString); View view = new View(); // a view class i made and suppose that this view is
主干网的路由器。用户只需给出正则表达式字符串,如r'^first/second/third/$”
,然后将其挂接到视图中
例如,假设我有这样一个RegExp
:
String regexString = r'/api/\w+/\d+/';
RegExp regExp = new RegExp(regexString);
View view = new View(); // a view class i made and suppose that this view is hooked to that url
一个HttRequest
指向/api/topic/1/
,它将匹配该正则表达式,然后我可以呈现任何链接到该url的内容
问题是,从上面的正则表达式中,我如何知道\w+
和\d+
值是主题和1
有人给我指点吗?谢谢。您需要将要提取的部分分组,以便从比赛中提取。这是通过将模式的一部分放在括号内实现的
//在\w+和\d+周围添加了括号以获得单独的组
字符串regexString=r'/api/(\w+/(\d+/);//不是r'/api/\w+/\d+/'!!!
RegExp RegExp=新的RegExp(regexString);
var matches=regExp.allMatches(“/api/topic/3/”);
打印(“${matches.length}”);//=>在字符串中找到1-1个模式实例
var match=匹配。元素位于(0);//=>提取第一个(也是唯一一个)匹配项
打印(“${match.group(0)}”);//=>/api/topic/3/-整场比赛
打印(“${match.group(1)}”);//=>主题-第一匹配组
打印(“${match.group(2)}”);//=>3秒配对组
但是,给定的正则表达式也将匹配“/api/topic/3//api/topic/4/”
,因为它没有锚定,并且它将有两个匹配(匹配。长度将是2)-每个路径一个,因此您可能希望改为使用它:
String regexString = r'^/api/(\w+)/(\d+)/$';
这确保正则表达式从字符串的开始到结束都被精确地锚定,而不仅仅是在字符串中的任何地方