我如何否定正则表达式?

问题描述 投票:0回答:1

我想知道一个字段,如果它与某个字符串不匹配:

情况1:如果上一个节点不是*_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,但这不起作用

regex rascal clair
1个回答
0
投票

您不能在模式内直接表达这种否定,但是这是通过在案例中添加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
    }
}

希望这可以解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.