有人可以帮我解决正则表达式遇到的问题吗?我有一个包含以下代码的文件:
我正在访问以查找匹配项并替换它们,以便删除空行。但是结果不是我所期望的。代码如下:
str content = readFile(location);
// Remove empty lines
content = visit (content) {
case /^[ \t\f\v]*?$(?:\r?\n)*/sm => ""
}
有人可以解释我在使用正则表达式以及下面显示的表达式时出了什么问题吗?我似乎无法弄清楚为什么它不起作用。
str content = readFile(location);
// Remove empty lines
content = visit (content) {
case /^\s+^/m => ""
}
亲切的问候,
鲍勃
[我认为这里最大的问题是,在visit
的上下文中,^
锚并不表示您认为的那样。参见以下示例:
rascal>visit ("aaa") { case /^a/ : println("yes!"); }
yes!
yes!
yes!
在您的示例访问中,将发生的是,行的空后缀也将与您的正则表达式匹配,并用空字符串替换它们。我认为另一个影响是回车没有被急切吃掉。
要解决此问题,请仅使用for
匹配作为条件,而不要使用while
循环或:=
。