Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex dart正则表达式匹配并从中获取一些信息_Regex_Dart - Fatal编程技术网

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+)/$';
这确保正则表达式从字符串的开始到结束都被精确地锚定,而不仅仅是在字符串中的任何地方