我正在使用下面的regex过滤掉字符串
^(?!.*(P1 | P2)).*groupName.*$这里的组名是我在运行时替换的特定字符串。这个正则表达式已经运行得很好。
我有两个输入字符串需要从这个正则表达式中传递。无法更改正则表达式的^(?!.*(P1 | P2))部分,因此只想在此部分之后更改正则表达式。它是一个非常通用的正则表达式,在很多地方都在使用,所以我唯一需要修改的地方就是正则表达式的groupName部分。有没有办法只有2字符串可以通过这个正则表达式?
1) ADMIN-P3-UI-READ-ONLY
2) ADMIN-P3-READ-ONLY在正则表达式中,groupName只是一个变量,它将在运行时被替换为所需的字符串。在这种情况下,我希望传递2字符串,因此可以用READ-ONLY替换groupName部件,但它也会传递1字符串。
有没有人能对此提出建议,如何让它工作?
发布于 2021-01-28 19:42:48
你可以使用负lookBehind:
(?<!UI-)READ-ONLY因此,在只读之前不能有UI
发布于 2021-01-29 01:43:10
您可以在模式的最开始添加另一个先行检查,以进一步限制它匹配的内容,因为您的模式属于"match-everything-but"类型。
因此,它可能看起来像
String extraCondition = "^(?!.*UI)";
String regex = "^(?!.*(P1|P2)).*READ-ONLY.*$";
String finalRegex = extraCondition + regex;该模式将如下所示
^(?!.*UI)^(?!.*(P1|P2)).*READ-ONLY.*$匹配
^(?!.*UI) -从string^(?!.*(P1|P2))开始尽可能多地在除换行符之外的任何零个或更多字符之后进行P1 -从READ-ONLY.*$开始尽可能多地在除换行符之外的任何零个或多个字符之后进行UI -尽可能多地在除换行符之外的任何零个或多个字符之后进行P1,然后是READ-ONLY.*$-字符串的其余部分。注意:除非您想确保输入字符串中没有多余的行,否则您可以在此处安全地删除$。https://stackoverflow.com/questions/65936101
复制相似问题