Regex with exclusion chars and another regex
Asked Answered
G

2

3

How to write regex which find word (without whitespace) that doesn't contain some chars (like * or #) and sentence also (like level10 or level2 - it should be also regex - level[0-9]+). It will be simple for chars excluded ([^\\s^#^*]+) but how to exclude this 'level' example too ?

I want to exclude chars AND level with number.

  1. Examples:
    • weesdlevel3fv - shouldn't match because of 'level3'
    • we3rlevelw4erw - should match - there is level without number
    • dfs3leveldfvws#3vd - shouldn't match - level is good, but '#' char appeared
    • level4#level levelw4_level - threat as two words because of whitespaces - only second one should match - no levels with number and no restricted chars like '#' or '*'
Garbo answered 5/8, 2014 at 17:55 Comment(1)
Please give more examples of valid and invalid input, and show what you tried.Santamaria
C
3

See this regex:

/(?<=\s)(?!\S*[#*])(?!\S*level[0-9])\S+/

Regex explanation:

  • (?<=\s) Asserts position after a whitespace sequence.
  • (?!\S*[#*]) Asserts that "#" or "*" is absent in the sequence.
  • (?!\S*level[0-9]) Asserts that level[0-9] is not matched in the sequence.
  • \S+Now that our conditionals pass, this sequence is valid. Go ahead and use \S+ or \S++ to match the entire sequence.

To use lookaheads more exclusively, you can add another (?!\S*<false_to_assert>) group.

View a regex demo!


For this specific case you can use a double negation trick:

/(?<=\s)(?!\S*level[0-9])[^\s#*]+(?=\s)/

Another regex demo.


Read more:

Chazan answered 6/8, 2014 at 0:16 Comment(3)
Thanks for answer and explanation. I tried it at 'weesdlevel3fv we3rlevel4erw dfsdfv#levels3vd fvlevels3vd' - should match last word but match last 3Garbo
@Garbo In regex, a word is defined as a collection of \w (word characters [A-Za-z0-9_]) surrounded by \W (non-word characters). I assume you meant that you are looking to match non-whitespace sequences (\S) between whitespaces (\s) then?Chazan
+1 for efficient use of classic password validation technique.Eczema
R
-1

you can simply OR the searches with the pipe character [^\s#*]+|level[0-9]+

Rashad answered 5/8, 2014 at 18:2 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.