正则表达式与排除字符和另一个正则表达式

时间:2014-08-05 17:55:27

标签: regex regex-negation

如何编写正则表达式,找到不包含某些字符(如*#)和句子的单词(没有空格)(如level10或{{1} } - 它也应该是正则表达式 - level2)。排除的字符(level[0-9]+)很简单,但如何排除此[^\\s^#^*]+示例?

我想用数字排除字符和级别。

  1. 实施例:
    • weesdlevel3fv - 由于'level3'
    • 而不应该匹配
    • we3rlevelw4erw - 应该匹配 - 没有数字的级别
    • dfs3leveldfvws#3vd - 不应该匹配 - 级别很好,但是'#'char出现了
    • level4#level levelw4_level - 由于空格而威胁为两个单词 - 只有第二个单词应匹配 - 没有数字级别且没有限制字符,如'#'或'*'

2 个答案:

答案 0 :(得分:3)

请参阅此正则表达式:

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

正则表达式解释:

  • (?<=\s)在空白序列后断言位置。
  • (?!\S*[#*])断言&#34;#&#34; &#34; *&#34; 在序列中不存在。< / LI>
  • (?!\S*level[0-9])断言 level[0-9] 在序列中不匹配。
  • \S+现在我们的条件传递了,这个序列是有效的。继续使用\S+\S++来匹配整个序列。

要更专注地使用前瞻,您可以添加另一个(?!\S*<false_to_assert>)组。

View a regex demo!


对于这种特殊情况,您可以use a double negation trick

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

Another regex demo.


了解详情:

答案 1 :(得分:-1)

您可以简单地使用竖线字符进行搜索 [^\s#*]+|level[0-9]+