我知道Chapel有Regexp Library,但我不明白如何使用捕获组。有人可以提供一个例子吗?
var template = "/home/user/:ID/details";
var uid = someKindaExtractyThing("/home/user/17/details");
writeln("So YOU are user ", uid, ", huh?")
> So YOU are user 17, huh?
这是我的目标。
答案 0 :(得分:4)
问题已经与文档相关联,所以真正要做的就是显示一个代码示例。
use Regexp;
var input = "/home/user/17/details";
var capture:string;
var r = compile("""/home/user/(\w+)/details""");
var match = r.match(input, capture);
if match.matched then
writeln(capture);
else
writeln("not a match!");
“”这项业务只适用于现在的主人或Chapel 1.17或更新版本(否则你必须'\' - 在常规的“字符串”中逃避'\')。Regexp module documentation关于你可以放在正则表达式中的更多细节。
如果您有多个捕获组,则需要使用更多参数进行搜索以获取它们。搜索在字符串中查找模式,但匹配则表明整个字符串与模式匹配。
以下是2个捕获组的示例:
use Regexp;
var input = "/home/user/17/details";
var part1:string;
var part2:string;
var r = compile("""/home/user/(\w+)/(\w+)""");
var match = r.match(input, part1, part2);
if match.matched then
writeln( (part1,part2) );
else
writeln("not a match!");