需求:编写正则表达式匹配含Jack和1080p且排除Highlights的字符串
正则表达式解决方案:匹配含Jack和1080p且不含Highlights的字符串
需求说明
需要匹配同时包含Jack和1080p(顺序不限)、但不包含Highlights的字符串,目标匹配以下文本中的第1、3、5行:
Movie - Jack v John - 1080p
Movie - Jack v John - Highlights - 1080p
Movie - John v Jack - 1080p
Movie - John v Jack - Highlights - 1080p
Movie - 1080p - John v Jack
Movie - Highlights - 1080p - John v Jack
问题分析
之前尝试的正则存在核心逻辑错误:
Jack.[^Highlights]*1080p:[^Highlights]是排除单个字符,而非整个Highlights单词,无法实现排除目标/[Highlights]\|(Jack.*1080p):语法混乱,未正确构建排除+匹配的逻辑Jack.*1080p^((?!Highlights).)*$、Jack.^((?!Highlights).)*1080p:排除逻辑的正则位置错误,无法覆盖整行检查
正确正则表达式
^(?!.*Highlights).*(Jack.*1080p|1080p.*Jack)$
正则解释
^(?!.*Highlights):从行首启动负向预查,确保整行完全不包含Highlights字符串.*(Jack.*1080p|1080p.*Jack):覆盖两种关键词顺序的匹配:Jack.*1080p:匹配Jack在前、1080p在后的内容,中间可接任意字符1080p.*Jack:匹配1080p在前、Jack在后的内容,中间可接任意字符
- 前后的
.*用来匹配关键词之外的任意内容,适配所有位置场景
使用说明
在siftrss.com中直接输入上述正则即可,无需添加正则分隔符(如/)。
内容的提问来源于stack exchange,提问作者John Simon
相关产品推荐
相关产品推荐

