I would like to create a RegEx that follows these rules:
- Pattern starts with the letter K
- Is followed by any number (0-9) or any letter (a-z) between 1 and 3 times.
- The symbol # can exist 0 or 1 time, anywhere after the starting K.
- The pattern must end with the symbol $.
I'm confused on the 3rd rule.
I have come up with this so far: (^K)([0-9a-z]{1,3}) that I believe is correct for the first two rules.
Some correct examples would be:
- Kabc$
- Ka#bc$
- K01#a$
- K#1ab$
CodePudding user response:
You can use
^K(?!.*#.*#)(?:#?[0-9a-z]){1,3}#?\$$
Or, variations of it:
^K(?!(?:.*#){2})(?:#?[0-9a-z]){1,3}#?\$$
^K(?!(?:[^#]*#){2})(?:#?[0-9a-z]){1,3}#?\$$
See the regex demo. Details:
^- start of stringK- the letterK(?!.*#.*#)/(?!(?:.*#){2})/(?!(?:[^#]*#){2})- no two#are allowed immediately to the right of the current location (this makes sure that if there is a#, it only occurs once)(?:#?[0-9a-z]){1,3}- one, two or three occurrences of#?- an optional#char[0-9a-z]- a lowercase ASCII letter or digit
#?- an optional#\$- a$char$- end of string.
