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

时间:2018-01-26 19:47:37

标签: regex 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?

这是我的目标。

1 个答案:

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