正则表达式过滤掉字符串

时间:2021-01-28 11:21:24

标签: java regex

我正在使用下面的正则表达式过滤掉字符串

^(?!.*(P1 | P2)).*groupName.*$

这里的组名是我在运行时替换的特定字符串。这个正则表达式已经运行良好。

我有两个输入字符串需要从这个正则表达式中通过。无法更改正则表达式的 ^(?!.*(P1 | P2)) 部分,因此只想在此部分之后更改正则表达式。它是一个非常通用的正则表达式,在很多地方都被使用,所以我唯一可以更改的地方是正则表达式的 groupName 部分。有没有办法让只有 2 字符串可以通过这个正则表达式?

1) ADMIN-P3-UI-READ-ONLY
2) ADMIN-P3-READ-ONLY

在正则表达式中 groupName 只是一个变量,它将在运行时用所需的字符串替换。在这种情况下,我希望传递 2 字符串,因此 groupName 部分可以替换为 READ-ONLY 但它也会传递 1 字符串。

有人可以就此提出建议吗?

2 个答案:

答案 0 :(得分:0)

你可以使用否定的lookBehind:

(?<!UI-)READ-ONLY

所以在 READ-ONLY 之前必须没有 UI-

答案 1 :(得分:0)

您可以在模式的最开始添加另一个前瞻,以进一步限制匹配的内容,因为您的模式属于 "match-everything-but" 类型。

所以,它可能看起来像

String extraCondition = "^(?!.*UI)";
String regex = "^(?!.*(P1|P2)).*READ-ONLY.*$";
String finalRegex = extraCondition + regex;

图案看起来像

^(?!.*UI)^(?!.*(P1|P2)).*READ-ONLY.*$

匹配

  • ^(?!.*UI) - 在任何零个或多个字符之后没有 UI,除了从字符串的开头起尽可能多的换行符
  • ^(?!.*(P1|P2)) - 在任何零个或多个字符之后没有 P1P2,除了从字符串的开头起尽可能多的换行符
  • .*READ-ONLY - 除换行符以外的任何零个或多个字符,然后是 READ-ONLY
  • .*$ - 字符串的其余部分。 注意,除非您想确保输入字符串中没有多余的行,否则您可以安全地删除此处的 $