Reducer 中的正则表达式匹配
Regexp Matching in Reducer
我在看减速器。
有一个nice example in the Tutor用来统计字数:
(0 | it + 1 | /\w+/ := S)
其中 S
是包含多个单词的较长字符串。 reducer returns 此类单词的计数。
我想知道如何捕获匹配的子字符串并将其用于累加表达式,例如
("" | it + e | str e ... /\w+/ := S)
因此结果将是所有匹配子字符串的串联。
有什么想法吗?
是的,捕获语法使用 <name:regex>
表示法:
("" | it + e | /<e:\w+>/ := S)
rascal>S ="Jabberwocky by Lewis Carroll";
str: "Jabberwocky by Lewis Carroll"
rascal>("" | "<it>,<e>" | /<e:\w+>/ := S)[1..]
str: "Jabberwocky,by,Lewis,Carroll"
或使用 for-template 语法代替 reducer 表达式:
rascal>x = "<for (/<e:\w+>/ := S) {><e>;
>>>>>>> '<}>";
str: "Jabberwocky;\nby;\nLewis;\nCarroll;\n"
rascal>import IO;
ok
rascal>println(x)
Jabberwocky;
by;
Lewis;
Carroll;
ok
rascal>
我在看减速器。
有一个nice example in the Tutor用来统计字数:
(0 | it + 1 | /\w+/ := S)
其中 S
是包含多个单词的较长字符串。 reducer returns 此类单词的计数。
我想知道如何捕获匹配的子字符串并将其用于累加表达式,例如
("" | it + e | str e ... /\w+/ := S)
因此结果将是所有匹配子字符串的串联。
有什么想法吗?
是的,捕获语法使用 <name:regex>
表示法:
("" | it + e | /<e:\w+>/ := S)
rascal>S ="Jabberwocky by Lewis Carroll";
str: "Jabberwocky by Lewis Carroll"
rascal>("" | "<it>,<e>" | /<e:\w+>/ := S)[1..]
str: "Jabberwocky,by,Lewis,Carroll"
或使用 for-template 语法代替 reducer 表达式:
rascal>x = "<for (/<e:\w+>/ := S) {><e>;
>>>>>>> '<}>";
str: "Jabberwocky;\nby;\nLewis;\nCarroll;\n"
rascal>import IO;
ok
rascal>println(x)
Jabberwocky;
by;
Lewis;
Carroll;
ok
rascal>