如何用正则表达式表示不包含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)。 
  22222222222222222
  常见函数 strstr($str, "abc"); 
  正则匹配 preg_match("/(abc)?/is", $str); 
  但是要匹配一个字符串中,不包含某字符串,用正则就比较麻烦了 
  如果不用正则 !strstr($str, "abc"); 就可以解决问题了 
  但是用正则呢,就只有这样了,"/^((?!abc).)*$/is" 
  33333333333333333
  常见函数 strstr($str, "abc"); 
  正则匹配 preg_match("/(abc)?/is", $str); 
  但是要匹配一个字符串中,不包含某字符串,用正则就比较麻烦了 
  如果不用正则 !strstr($str, "abc"); 就可以解决问题了 
  但是用正则呢,就只有这样了,"/^((?!abc).)*$/is" 
  //------------------------------------------------ 
  复制代码 代码如下:
   
  //------------------------------------------------ 
  结果为:false,含有abc! 
  $str = "2b3c4d5c"; 
  注意:[^(abc)] 这个语法是逐个检查$str中的字符是否不在 a b c中, 
  preg_match("/[^(abc)]/s", $str, $arr); 
  其中字符 2 就不在 a b c 中,所以$arr返回值为2; 
  同时匹配,包含字符串 "abc",而且不包含字符串 "xyz" 
  "/(abc)[^((?!xyz).)*$]/s" 
  详细出处参考:http://www.jb51.net/article/19910.htm
  44444444444444444444
  (?!((\w)*java(\w)*)  
  这个是不匹配的
  555555555555555555555555
  String regex = "(?:(?!party).)*";
  欢迎转载,但请保留出处,本文章转自[华软网] 原文链接:http://www.huarw.com/program/java/JAVA02/200806/16 02138_2.html
  6666666 [此问题的推荐答案]
  ^((?!sound).)+$ 
  这个只要有sound出现就不匹配. 
  有的表达式可能需要MULTILINE多行模式 . 
  /c/sound/1.mp3 不匹配 
  /c/so/und/1.mp3 匹配 
  /c/s/1.mp3 匹配 
  /c/qwersoundzxcv/1.mp3 不匹配
  找出所有img标签的,没有带说明属性alt的标签:
  正则:]*?alt[^]*?>).*?>
  例子:       
  扩展,如果要找没有带title属性的a应该是:
  正则:]*?title[^]*?>).*?>
  例子:       

你可能感兴趣的:(正则表达式)