欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

正则表达式:不包含多个指定字符串的写法! 有大用 不匹配包含的多个字符串 有大用 有大大用 有大大大用

shiping1 的头像

 

不包含字符串abc的正则表达式

分类: JavaScript 3744人阅读 评论(0) 收藏 举报

[^abc]表示不包含a、b、c中任意字符, 我想实现不包含字符串abc应该如何写表达式?

最简洁的写法:

\b((?!abc)\w)+\b
匹配由字母或数字或下划线或汉字组成的字串,但字串中不能出现abc

解释:
  \b 匹配单词的开始或结束;
  ?!exp 零宽负向先行断言,只会匹配后缀exp不存在的位置;
  \w 匹配字母或数字或下划线或汉字;
  + 重复一次或更多次;
  \b((?!abc)\w)+\b 匹配由字母或数字或下划线或汉字组成的字串,但字串中不能出现abc。

测试:
  http://www.regextester.com/
来自 http://blog.csdn.net/xxd851116/article/details/7576624


 


我需要input里面不允许包含:初中、中学、初级中学这三个词语。 我写出了一个: /^((?!初中).)*$/is 应该怎么改,实现不包含“初中”,且不包含“中学”,也不包含“初级中学”?


/(?!.*初中|.*中学|.*初级中学)^.*$/



  •  

  •  
    来自 http://zhidao.baidu.com/link?url=y_eT4_nA3v7j8jhckKev0Ssy69_5AWoqPGUxhqRMwE8-KSRVpW_v3FH894dT4CwCidaz26idWCNJZh9ld-Wc5a
    
    

    用正则表达式找出不包含连续字符串abc的单词

    写过一篇"正则表达式30分钟入门教程",有读者问:
    [^abc]表示不包含a、b、c中任意字符, 我想实现不包含字符串abc应该如何写表达式?
    就我自己而言,这个问题最简单的解决方法是使用编程语言的配合,找出那些包含abc的,剩下的就是不包含的了——懒人的风格。但我写的是教程,读者未必都有编程的基础,有些只是使用一些工具从txt文档中抽取出一些信息,所以要回答还是必须完全通过正则表达式来完成。

    于是打开了RegexTester,开始试验,先是试了使用((?'test'abc)|.)*(?(test)(?!))(含意是:查找abc,或任意的字符,如果找到了abc,就把它存入命名为test的组里,到最后检查test组里是否有内容,如果有就匹配失败,相关说明见教程),结果是"abc","aabc","abcd","aa"都能通过测试,看来是到最后测试到test组存在后又回溯了,此解决方案不可行。

    然后又试了(.(?!abc))*(找出所有后面不是abc的字符),结果是"abc","abcd"通过测试,"aabc"则只截取了后面的"abc",显然不行。

    那加强条件试试:((?<!abc).(?!abc))*(找出所有前面和后面都不是abc的字符),结果是所有包含abc的字符串都只截取了里面的"abc",不包含abc的则直接通过。

    现在看来有点戏了,但是怎么把那些内部包含abc的字符串过滤掉呢?这个问题换句话说也就是怎么匹配整体而不是部分呢?现在需要明确用户的需求了:如果用户想要找的是单词,那就在表达式的两端加上\b,如果要找的是行,就加上^$。由于用户的问题没有明确说明,我就当作是单词吧。

    于是等到了这样的表达式:\b((?<!abc).(?!abc))*\b,经过测试,这个表达式能匹配所有不包含abc的单词,以及单词abc。

    怎么排除单词abc?经过一番思考,最后我认为判断单词是否以a开头的方式最为方便:\b(a(?!bc)|[^a](?!abc))((?<!abc).(?!abc))*\b(要么以后面不是bc的a开头,要么不以a开头,除了开头后面所有的字符必须前面和后面都不是abc)。经过测试,完全满足要求,Bingo!

    使用正则表达式查找不包含连续字符串abc的单词,最终结果:\b(a(?!bc)|[^a](?!abc))((?<!abc).(?!abc))*\b
    ----------------
    更新:根据maple的评论,更简洁的作法是
    :
    \b((?!abc)\w)+\b

    来自 http://www.cnblogs.com/deerchao/archive/2009/03/25/651411.html



    用正则表达式表示不包含2950的字符串

    使用Excel中的VBA测试如下(匹配式为:^((?!2950).)*$): 
    Sub Regs() 
    Dim RegEx As Object 
    Set RegEx = CreateObject("VBScript.regexp") 
    Dim s, mat 
    s = "399295078" 
    RegEx.Pattern = "^((?!2950).)*$" 
    RegEx.Global = True 
    MsgBox RegEx.test(s) 
    Set RegEx = Nothing 
    End Sub 
    如果匹配2950,则返会false,否则为true。 
    其中,(?!2950)表示不匹配2950, 
    而^表示匹配字符串的开始位置, 
    .表示匹配除 "\n" 之外的任何单个字符, 
    $表示匹配字符串的结束位置, 
    *表示匹配前面的子表达式零次或多次。 
    整个匹配式连起来就是:匹配空值或者匹配不含2950的字符串。 
    其中(?!2950)后面必须加一个“.”,那么(?!2950).表示不含2950且至少有一个字符。其实整个就是(?!2950)和(.)*的组合,(.)*表示空串或者任意一个串(不包含\n)。

    来自 http://www.jb51.net/article/19911.htm



    不包含字符串abc的正则表达式

    分类: JavaScript 3744人阅读 评论(0) 收藏 举报

    [^abc]表示不包含a、b、c中任意字符, 我想实现不包含字符串abc应该如何写表达式?

    最简洁的写法:

    \b((?!abc)\w)+\b
    匹配由字母或数字或下划线或汉字组成的字串,但字串中不能出现abc

    解释:
      \b 匹配单词的开始或结束;
      ?!exp 零宽负向先行断言,只会匹配后缀exp不存在的位置;
      \w 匹配字母或数字或下划线或汉字;
      + 重复一次或更多次;
      \b((?!abc)\w)+\b 匹配由字母或数字或下划线或汉字组成的字串,但字串中不能出现abc。

    测试:
      http://www.regextester.com/

    来自 http://blog.csdn.net/xxd851116/article/details/7576624
     

    [正则表达式]如何判断不包含某些子字符串呢?(转)

     (2009-04-08 11:12:01)
    标签: 

    杂谈

    分类: 好好学习

    [正则表达式]如何判断字符串中不包含某些子字符串呢?
     

    用正则表达式找出不包含连续字符串abc的单词
     

    php不包含某字符串的正则表达式




    php不包含某字符串的正则表达式

    类别:PHP , 来自: 龙鸟, 时间:2008-03-12 16:45

    摘要: 用正则实现包含某个字符串很容易,但如果实现不包含某个字符串呢?作者给出了一个解决方案。

    判断一个字符串中是否含有另一字符串,php有很多方法,如下:

    1. 常见函数
    1. strstr($str"abc");  


    2. 正则匹配
    1. preg_match("/(abc)/is"$str);  


    但是要匹配一个字符串中,不包含某字符串,用正则就比较麻烦了。
    1. 如果不用正则如下就可以解决问题
    1. !strstr($str"abc");  


    2. 但是用正则呢,就只有这样了
    1. preg_match("/^((?!abc).)*$/is"$str);  

    完整代码示例

    1. $str "dfadfadf765577abc55fd" 

    2. $pattern_url "/^((?!abc).)*$/is" 

    3. if (preg_match($pattern_url$str))  

    4.  

    5.     echo "不含有abc!" 

    6.  

    7. else  

    8.  

    9.     echo "含有abc!" 

    10.  


    结果为:false,含有abc!

    同时匹配,包含字符串 “abc”,而且不包含字符串 “xyz”的正则表达式:

    1. preg_match("/(abc)[^((?!xyz).)*$]/is"$str);  

    http://www.52web.com/52article/?view-121.html

    来自  http://blog.sina.com.cn/s/blog_53df94780100crty.html

     



     

普通分类: