如何否定正则表达式?
How can I negate a regular expression?
我想知道一个字段是否与某个字符串不匹配:
情况一:当前一个节点不是*_pcm.h
,则l1
给出文件路径l2
.
案例2:当没有l1
或者案例1
不成立时,那么l
就是我需要的
visit(sec) {
// case 1
case \sources(_, "_SOURCES", [*_, l1:\sourceList(_, _, _, p:/_pcm.h/i, _, _),
l2:\sourceList(_, _, _, n:/_pcm.c/i, _, _), *_]): {
name = determinePath(p, n, f);
}
// case 2
case \sources(_, "_SOURCES", [*_, l:\sourceList(_, _, _, n:/_pcm.c/i, _, _) , *_]): {
path = getPath(f);
}
}
我尝试了 p:!/_pcm.h/i
而不是 p:/_pcm.h/i
,但这不起作用
您不能直接在模式中表达这种否定,但这里有一个解决方法,即在您要转换的情况下向案例添加 when
条件(即,在模式之间使用 =>
和行动):
data D = d1(str s) | d2(int n);
D transform(D subject){
return visit(subject){
case d1(str s) => d1(s + s) when /abc/ !:= s
}
}
在比较复杂的情况下,你可以测试并使用fail
让案例失败。
case d1(str s): { if(/abc/ !:= s) fail; ... }
希望这能解决您的问题。
我想知道一个字段是否与某个字符串不匹配:
情况一:当前一个节点不是*_pcm.h
,则l1
给出文件路径l2
.
案例2:当没有l1
或者案例1
不成立时,那么l
就是我需要的
visit(sec) {
// case 1
case \sources(_, "_SOURCES", [*_, l1:\sourceList(_, _, _, p:/_pcm.h/i, _, _),
l2:\sourceList(_, _, _, n:/_pcm.c/i, _, _), *_]): {
name = determinePath(p, n, f);
}
// case 2
case \sources(_, "_SOURCES", [*_, l:\sourceList(_, _, _, n:/_pcm.c/i, _, _) , *_]): {
path = getPath(f);
}
}
我尝试了 p:!/_pcm.h/i
而不是 p:/_pcm.h/i
,但这不起作用
您不能直接在模式中表达这种否定,但这里有一个解决方法,即在您要转换的情况下向案例添加 when
条件(即,在模式之间使用 =>
和行动):
data D = d1(str s) | d2(int n);
D transform(D subject){
return visit(subject){
case d1(str s) => d1(s + s) when /abc/ !:= s
}
}
在比较复杂的情况下,你可以测试并使用fail
让案例失败。
case d1(str s): { if(/abc/ !:= s) fail; ... }
希望这能解决您的问题。