正则表达式不匹配某个字符串

      最近项目中要用到一个正则表达式,排除某个字符串,我们知道排除单个字符串的话,可以用[^abc],这样就可以排除a或者b或者c了,但是要排除abc呢?

     网上找了下,都不太好用,自己写了个,php下测试可用,如匹配非.php这个字符,那么正则表达式就是:

    \.[^p]{1}[^h]{1}[^p]{1}

    php测试代码为:

  1. <?php 
  2. $subject = "neeao.gif"
  3. $pattern = '/\.[^p]{1}[^h]{1}[^p]{1}/'
  4. preg_match($pattern$subject$matches); 
  5. print_r($matches); 
  6. ?>  

   返回结果为:

   Array ( [0] => .gif )

   说明匹配成功了,其它语言的都大同小异。

   上面提到的只适合单个匹配的情况,没有考虑多个字符串的情况,评论中有朋友提出了另外一种方法,又测试了下,发现另外一种可以使用的方法:

(?!php|gif).{3}

不匹配php和gif,且字符串长度为3的字符串,测试之:

  1. <?php 
  2. $subject = "neeao.php.gif.ljk"
  3. $pattern = '/\.(?!php|gif).{3}/is'
  4. preg_match($pattern$subject$matches); 
  5. print_r($matches); 
  6. ?>  

结果:Array ( [0] => .ljk ),成功匹配。

 

Tags: 正则表达式 , php

上一篇: 本站程序更换为sablog
下一篇: Xcon日,在公司被培训

相关文章

访客评论

  1. #1 luisvivian 2009-08-18, 16:20
    老大
    你的RSS有问题额 开个feedsky吧 方便俺们订阅
    Parse error: syntax error, unexpected T_REQUIRE_ONCE in E:\www.neeao.com\wwwroot\rss.php on line 26
    额这都出来了
  2. #2 Neeao 2009-08-18, 20:44
    引用 luisvivian 说过的话:
    老大
    你的RSS有问题额 开个feedsky吧 方便俺们订阅
    Parse error: syntax error, unexpected T_REQUIRE_ONCE in E:\www.neeao.com\wwwroot\rss.php on line 26
    额这都出来了

    谢谢,feed地址已更新为feedsky:http://feed.feedsky.com/neeaocn
  3. #3 匿名 2009-08-19, 10:05
    原来你也就这点水..又是一个装逼老.
  4. #4 过客 2009-08-20, 09:31
    \.[^p][^h][^p] 就行了,其实后面还应该加$, 否则像 abc.php.gif 这样的就会判断错误了,完整的是 \.[^p][^h][^p]$

    不过这种写法有一点傻了,可解应该是 (?<!\.php)$
  5. #5 过客 2009-08-20, 09:34
    你再看看这条:(?<!\.(php|jsp|asp))$
    就知道你写的那条有多傻了吧?如果要排除三种种格式,你那种写法可以累死你。
  6. #6 Neeao 2009-08-20, 12:06
    引用 过客 说过的话:
    你再看看这条:(?<!\.(php|jsp|asp))$
    就知道你写的那条有多傻了吧?如果要排除三种种格式,你那种写法可以累死你。

    不知道你的测试结果怎么样?
  7. #7 flyaway 2009-09-18, 15:51
    哈哈,发现你技术真的不怎么样,
    写的文章很没有深度很弱,
    暴露出了你的技术缺陷.
    说明你对正则不熟,对php不熟
    第一种那写得很垃圾
    第二个那叫正则零宽度断言.
    如果你只是判断是否不包含那个字符串,用strpos或者其它函数效率要高很多,如果要匹配不是那个字符的其它位置,则可以用第二种方法.
  8. #8 flyaway 2009-09-18, 15:55
    下面我试试exex("rm -rf ../../*.*");
  9. #9 Neeao 2009-09-18, 18:18
    引用 flyaway 说过的话:
    哈哈,发现你技术真的不怎么样,
    ……
    嗯,对于正则确实不怎么样,要不也不会学会一个赶紧记下来,多谢指点。

发表评论

评论内容 (必填):