Regex with exclusion chars and another regex

泪湿孤枕 提交于 2019-12-10 10:28:35

问题


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 '*'

回答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 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:

  • 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!