如何在 Chapel 中使用正则表达式提取子字符串?

How do extract a substring using regular expressions in Chapel?

我知道 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?

这是我的目标。

这个问题已经链接到文档,所以真正剩下要做的就是展示一个代码示例。

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!");

“””业务现在只能与 master 或 Chapel 1.17 或更高版本一起使用(否则您必须在常规 "string" 中使用“\”转义“\”)。Regexp module documentation 有更多关于可以在正则表达式中输入的内容的详细信息。

如果您有多个捕获组,您将使用更多参数来搜索以获取它们。 search 在字符串中查找模式,但 match 坚持认为整个字符串都匹配该模式。

这是一个包含 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!");