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

本文介绍如何使用正则表达式来排除特定字符串的方法,包括VBA中的应用实例及PHP中的常见函数对比,适用于需要精确匹配场景。
  使用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[^]*?>).*?>
  例子:
### JavaJava 中,要判断一个字符串是否只包含中文,可以使用如下代码: ```java import java.util.regex.Pattern; public class OnlyChineseChecker { public static boolean isOnlyChinese(String input) { String regex = "^[\\u4e00-\\u9fa5]+$"; return Pattern.matches(regex, input); } public static void main(String[] args) { String test = "你好世界"; System.out.println(isOnlyChinese(test)); } } ``` 在上述代码里,`^[\\u4e00-\\u9fa5]+$` 是正则表达式,`^` 表示字符串的开始,`[\\u4e00-\\u9fa5]` 匹配中文字符,`+` 表示匹配前面的元素一次或多次,`$` 表示字符串的结束。`Pattern.matches()` 方法用于判断整个字符串是否匹配该正则表达式。 ### Python 在 Python 中,实现判断字符串包含中文的代码如下: ```python import re def is_only_chinese(input_string): pattern = re.compile(r'^[\u4e00-\u9fa5]+$') return bool(pattern.match(input_string)) test_string = "你好世界" print(is_only_chinese(test_string)) ``` 这里的 `^[\u4e00-\u9fa5]+$` 正则表达式Java 中的作用相同,`re.compile()` 编译正则表达式,`pattern.match()` 从字符串开头开始匹配,如果匹配成功则返回匹配对象,通过 `bool()` 换为布尔值。 ### JavaScript 在 JavaScript 中,判断字符串包含中文的代码为: ```javascript function isOnlyChinese(input) { let regex = /^[\u4e00-\u9fa5]+$/; return regex.test(input); } let test = "你好世界"; console.log(isOnlyChinese(test)); ``` 同样,`/^[\u4e00-\u9fa5]+$/` 是正则表达式,`regex.test()` 方法用于检测字符串是否匹配该正则表达式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值