问题
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.
- 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 '*'
回答1:
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 thatlevel[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:
- Regex for existence of some words whose order doesn't matter
回答2:
you can simply OR the searches with the pipe character
[^\s#*]+|level[0-9]+
来源:https://stackoverflow.com/questions/25145307/regex-with-exclusion-chars-and-another-regex