I_just_smile
baboon_chen
采纳率100%
2020-12-14 08:58

求正则表达式:匹配不包含"E2564"、"E2462"的字符串

10

测试文本:

E2564-E2462
E246211111
111E2462111
E2411111162
112233

E246E256

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

24条回答

  • qq_25376897 qq_25376897 4月前

    .*(E(?![2564|2462])).*  你这个的效果是匹配有E的,E后面不能跟2 5 6 4 |  这5个字符([]里面的东西)。

    和你之前说的   “E2564” 与 “E2462”是一个子串,明显不一样呀。难道shell里面的正则表达式还是shell独创的语法吗?

    点赞 1 评论 复制链接分享
  • qq_25376897 qq_25376897 4月前

    “中间夹杂其它数字就不算”,那E2411111162不就是属于不包含这两个字串的行,那不就是满足条件的,需要被筛出来的。

    原谅我被绕晕了。。。。

    点赞 1 评论 复制链接分享
  • I_just_smile baboon_chen 4月前

    解决了。感谢各位的帮忙。特别感谢 @qq_25376897

    首先,自己有问题,之前自己运行的shell环境是C-shell,直接执行命令 grep -E '.....'   这样输入的正则表达式不支持。

    如果将SHELL换成bash,并且将 正则模式指定为Perl,那就可以用这个正则表达式了: .*(E(?!2564|2462)).*

    结果图如下:

     

    点赞 评论 复制链接分享
  • bosaidongmomo bosaidongmomo 4月前

    我又看不到你shell怎么写的。真的是

    点赞 评论 复制链接分享
  • I_just_smile baboon_chen 4月前

    如果用这个的话就不能排除112233这种文件
    .*(E(?![2564|2462])).*

    点赞 评论 复制链接分享
  • I_just_smile baboon_chen 4月前

    回答的各位都是用不同的方法去“改变”这个问题,我是求正则表达式,用零宽度断言的那种,我有点不明白,我用这个表达式为什么不行: ^(?=E2564|E2642).*&

    点赞 评论 复制链接分享
  • bosaidongmomo bosaidongmomo 4月前

    点赞 评论 复制链接分享
  • bosaidongmomo bosaidongmomo 4月前

    点赞 评论 复制链接分享
  • jslang 天际的海浪 4月前

    E2411111162 需要不匹配,是指数字中间可以夹杂其它数字是吗?
     

    点赞 评论 复制链接分享
  • jslang 天际的海浪 4月前
    var arr = [
    "E2564-E2462",
    "E246211111",
    "111E2462111",
    "E2411111162",
    "112233",
    "E246E256"
    ];
    
    var reg = /^((?!E2\d*5\d*6\d*4|E2\d*4\d*6\d*2).)*$/;
    for (var i = 0; i < arr.length; i++) {
    	if (reg.test(arr[i]))
    		alert(arr[i]);
    }
    
    
    点赞 评论 复制链接分享
  • I_just_smile baboon_chen 4月前

    假设你有一个这样的场景,你要运行shell脚本,删除一个目录下,文件名中不包含"E2564"、"E2462"的文件,shell脚本是别人固定了的,你只需要提供正则表达式。这样描述OK吗?

    点赞 评论 复制链接分享
  • weixin_44058725 雨生百谷,方为谷雨 4月前
    /[E][2][^45][6][^42]/g取个不包含就好了
    点赞 评论 复制链接分享
  • I_just_smile baboon_chen 4月前

    我是在shell下运行正则,没有在代码里面

    点赞 评论 复制链接分享
  • weixin_44058725 雨生百谷,方为谷雨 4月前

    判断它是否等与false,或者还有match方法啊,正则有replact等方法

    点赞 评论 复制链接分享
  • weixin_44058725 雨生百谷,方为谷雨 4月前

    console.log(pattern.test(str))是布尔值false就可以了啊

    点赞 评论 复制链接分享
  • I_just_smile baboon_chen 4月前

    [E][2][4,5][6][4,2]这个也不行,这是必须包含"E2564"、"E2462"了,我要取反。。。

    点赞 评论 复制链接分享
  • weixin_44058725 雨生百谷,方为谷雨 4月前
    var pattern = /[E][2][4,5][6][4,2]/g, //灵活一些的/[E][2][1-9][6][1-9]/g
    	str = '';
    console.log(pattern.test(str));

    有在线的网址可以测试,也可以生成代码。https://c.runoob.com/front-end/854

    点赞 评论 复制链接分享
  • I_just_smile baboon_chen 4月前

    不算,这个“E2564”与“E2462”是一个子串,如果中间夹杂其它数字就不算了。
    就是筛选出不包含这两个字串的行。

    点赞 评论 复制链接分享
  • qq_25376897 qq_25376897 4月前

    E2411111162 这样的不算? "E2564"、"E2462" 这两个可以拆开,只要不匹配字符,不用完整的串?

    点赞 评论 复制链接分享
  • I_just_smile baboon_chen 4月前

    要筛选出不包含"E2564"、"E2462"的行:
    112233
    E246E256

    点赞 评论 复制链接分享
  • qq_25376897 qq_25376897 4月前

    你要的效果是怎么样的

    点赞 评论 复制链接分享
  • I_just_smile baboon_chen 4月前

    这些都不行啊

    点赞 评论 复制链接分享
  • qq_25376897 qq_25376897 4月前

    ^((?!E2564|E2462).)*$

    点赞 评论 复制链接分享
  • qq_33744228 Y__Cheng 4月前

    /[^E2564-E2462]+/g

    点赞 评论 复制链接分享