找回密码
 立即注册
搜索
查看: 1118|回复: 6

[其他] [已结]正则表达式的正向否定预查,无法筛选某些字符串

[复制链接]
头像被屏蔽
     
发表于 2022-3-22 11:57 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2022-3-22 12:05 | 显示全部楼层
这么多年就感觉没写过.?!
需求是什么?

上个jsfiddlr调啊
s1这瞎眼高亮
回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2022-3-22 12:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2022-3-22 12:16 | 显示全部楼层
用个交互式的工具来调试会比较方便:
https://regexr.com/

另外个人不推荐用 (.*?) 这种写法:
在某些实现方案里匹配效率低, 容易让人理解错误
可以考虑改用 ([^"]*) , 明确表达"我要匹配一串字符, 其中应该没有双引号"

评分

参与人数 1战斗力 +1 收起 理由
该用户不存在 + 1

查看全部评分

回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2022-3-22 12:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2022-3-23 01:04 | 显示全部楼层
试试这个?不知道有没有理解错:

(-0\"\]\[-ext-contains=\"([^”\]\[])*\"\])(?!,)

另外自己写的时候一般减号和等号不用转义,所以见到楼主的写法感到还挺新奇。

猜测原来的表达式匹配整行的原因是楼主以为(.*?)会懒匹配到逗号之前,实际上为了尽可能匹配(这里指加上了后面的否定后向断言),从逗号到行末都被纳入了这个(.*?)里,换言之这里贪心匹配的优先级比懒惰匹配更高。

不过以上也是照答案来强行解释了,不同的正则实现有不同的行为非常正常,多踩坑就好。

评分

参与人数 1战斗力 +1 收起 理由
该用户不存在 + 1 完美的解决方案

查看全部评分

回复

使用道具 举报

头像被屏蔽
     
 楼主| 发表于 2022-3-23 11:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-9-23 03:20 , Processed in 0.031882 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表