简体   繁体   中英

regex to filter out string

I'm filtering out string using below regex

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

Here group name is specific string which I replace at run time. This regex is already running fine.

I've two input strings which needs to pass through from this regex. Can't change ^(?..*(P1 | P2)) part of regex, so would like to change regex after this part only. Its a very generic regex which is being used at so many places, so I have only place to have changes is groupName part of regex. Is there any way where only 2 string could pass through this regex?

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

In regex groupName is a just a variable which will be replaced at run time with required string. In this case I want 2 string to be passed, so groupName part can be replaced with READ-ONLY but it will pass 1 string too.

Can anyone suggest on this how to make this work?

You could use negative lookBehind:

(?<!UI-)READ-ONLY

so there must be no UI- before READ-ONLY

You can add another lookahead at the very start of your pattern to further restrict what it matches because your pattern is of the "match-everything-but" type.

So, it may look like

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

The pattern will look like

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

matching

  • ^(?..*UI) - no UI after any zero or more chars other than line break chars as many as possible from the start of string
  • ^(?..*(P1|P2)) - no P1 nor P2 after any zero or more chars other than line break chars as many as possible from the start of string
  • .*READ-ONLY - any zero or more chars other than line break chars as many as possible and then READ-ONLY
  • .*$ - the rest of the string. Note you may safely remove $ here unless you want to make sure there are no extra lines in the input string.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM