正则表达式中的正则表达式否定运算符

时间:2017-04-09 20:17:43

标签: regex

我想问一下这个正则表达式背后是否有任何逻辑:

([^\D5]{1})

它映射所有数字,但不应该忽略5?

我知道当我想忽略5时我可以使用这个正则表达式:

{{1}}

但是我很好奇是否在分组过程中使用否定运算符背后有任何逻辑,或者它应该始终在开头使用。

2 个答案:

答案 0 :(得分:1)

因为我不能评论(不够代表)。试试以下

([0-46-9])

通常对于否定你需要^之后的[,所以正则表达式忽略5的看起来像

[^5]

至于你的查询,你要求正则表达式匹配一个数字,然后是行的开头,然后是5. ^在[]之外表示行/字符串的开头。

上面带着一点点盐,我不是正则表达的新手,但我并不是那么强烈的否定。

答案 1 :(得分:0)

有一些正则表达式引擎支持字符类交集。例如,您可以使用:

[\d&&[^5]]

语法为:

[class&&[intersect]]

引用regex-expresion.info

  

Java,JGsoft V2以及Ruby 1.9及更高版本支持字符类交集。它可以轻松匹配必须存在于两组字符中的任何单个字符。这个语法是[class&& [intersect]]。您可以在相交的字符类中使用完整的字符类语法。

     

如果相交的类不需要否定插入符号,则Java和Ruby允许您省略嵌套的方括号:[class&& intersect]。

无论如何,大多数引擎都没有这个逻辑,所以当你必须否定一个字符类时,你必须使用语法[^...],但你不能改变^来排除某些字符并允许其他人,你需要扩展你的正则表达式而不是使用快捷方式。