当前位置:  开发笔记 > 编程语言 > 正文

需要正则表达式来排除某些字符串

如何解决《需要正则表达式来排除某些字符串》经验,为你挑选了2个好方法。

我正在尝试获得匹配的正则表达式:

somefile_1.txt
somefile_2.txt
somefile_{anything}.txt

但不匹配:

somefile_16.txt

我试过了

somefile_[^(16)].txt

没有运气(甚至包括"16"记录)



1> phihag..:

一些正则表达式库允许前瞻:

somefile(?!16\.txt$).*?\.txt

否则,您仍然可以使用多个字符类:

somefile([^1].|1[^6]|.|.{3,})\.txt

或者,为了实现最大的便携性:

somefile([^1].|1[^6]|.|....*)\.txt

[^(16)] 表示:匹配任何字符,但是大括号,1和6.



2> Douglas Mayl..:

已经提到了最好的解决方案:

somefile_(?!16\.txt$).*\.txt

这是有效的,并且足够贪婪,可以在同一条线上接收任何东西.但是,如果你知道你想要一个有效的文件名,我建议你也限制无效字符:

somefile_(?!16)[^?%*:|"<>]*\.txt

如果你正在使用一个不支持前瞻的正则表达式引擎,你将不得不考虑如何弥补它!16.您可以将文件拆分为两组,一组以1开头,后面跟不是6,以及以其他方式开头的组:

somefile_(1[^6]|[^1]).*\.txt

如果你想允许somefile_16_stuff.txt而不是somefile_16.txt,那么上面的这些正则表达式是不够的.您需要以不同方式设置限制:

somefile_(16.|1[^6]|[^1]).*\.txt

综合这一切,最终会有两种可能性,一种阻塞单个实例(somefile_16.txt),另一种阻塞所有系列(somefile_16*.txt).我个人认为你更喜欢第一个:

somefile_((16[^?%*:|"<>]|1[^6?%*:|"<>]|[^1?%*:|"<>])[^?%*:|"<>]*|1)\.txt
somefile_((1[^6?%*:|"<>]|[^1?%*:|"<>])[^?%*:|"<>]*|1)\.txt

在没有删除特殊字符的版本中,因此更容易阅读:

somefile_((16.|1[^6]|[^1).*|1)\.txt
somefile_((1[^6]|[^1]).*|1)\.txt

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有