如何用正则表达式表示不包含2950的字符串?转

使用Excel中的VBA测试如下(匹配式为:^((?!2950).)*$):

SubRegs()

DimRegExAsObject

SetRegEx=CreateObject("VBScript.regexp")

Dims,mat

s="399295078"

RegEx.Pattern="^((?!2950).)*$"

RegEx.Global=True

MsgBoxRegEx.test(s)

SetRegEx=Nothing

EndSub

如果匹配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中的字符是否不在abc中,

preg_match("/[^(abc)]/s",$str,$arr);

其中字符2就不在abc中,所以$arr返回值为2;

同时匹配,包含字符串"abc",而且不包含字符串"xyz"

"/(abc)[^((?!xyz).)*$]/s"

详细出处参考:http://www.jb51.net/article/19910.htm

44444444444444444444

(?!((\w)*java(\w)*)

这个是不匹配的

555555555555555555555555

Stringregex="(?:(?!party).)*";

欢迎转载,但请保留出处,本文章转自[华软网]原文链接:http://www.huarw.com/program/java/JAVA02/200806/1602138_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[^]*?>).*?>

例子:

相关推荐