正则求助

2016-03-16 09:49:28 +08:00
 Naples

想要匹配出 A ,同时不匹配出 B , B 是 A 的子集

2434 次点击
所在节点    正则表达式
26 条回复
iEverX
2016-03-16 09:51:30 +08:00
不明白,可以给个例子出来看看
Naples
2016-03-16 09:53:09 +08:00
@iEverX 简单的例子:我想通过.*google.*匹配出所有包含 google 的字符串,同时不能匹配出 dl.google.com ,语法上如何做到
czheo
2016-03-16 09:53:51 +08:00
ming2281
2016-03-16 09:57:00 +08:00
[A^B]
Naples
2016-03-16 10:05:20 +08:00
@ming2281 不行欸
ming2281
2016-03-16 10:07:49 +08:00
@Naples 能给出应用举例吗
czheo
2016-03-16 10:10:59 +08:00
(?=^((?!dl\.google\.com).)*$)(?=^.*google.*$)
Naples
2016-03-16 10:11:03 +08:00
@ming2281 匹配 DNS 请求,除了个别特定的网址(例如 dl.google.com )其他所有包含 google 字眼的网址
czheo
2016-03-16 10:15:58 +08:00
^(?=(?!dl\.google\.com)).*google.*$
Naples
2016-03-16 10:17:28 +08:00
@czheo 测试通过!谢谢
Naples
2016-03-16 10:20:45 +08:00
@czheo 请问在添加一个 google.cn 是不是 ^(?=(?!dl\.google\.com|google\.cn)).*google.*$
imn1
2016-03-16 10:21:38 +08:00
这问题有歧义,除非 A 含有通配符,否则直接把 A 写完整就行了
Naples
2016-03-16 10:23:11 +08:00
@imn1 我表达问题, A 是.*google.*
ming2281
2016-03-16 10:27:31 +08:00
(?=[^dl]+
\.google\.com )
ming2281
2016-03-16 10:29:22 +08:00
(?=[^dl]+).+\.google\.com
Kisesy
2016-03-16 10:30:40 +08:00
非要写在一条正则上?这样根本不好维护,加黑名单最简单
ming2281
2016-03-16 10:34:47 +08:00
完善下
^(?=(?!dl\.google\.com)).+?\.google\.(com|cn|jp|hk)$
ming2281
2016-03-16 10:36:45 +08:00
我才发现正则没有 AND 功能(C#好象有此功能,私有拓展)
用环视做出来,好蹩脚
Naples
2016-03-16 10:53:25 +08:00
@czheo 看错了,测试不通过
Naples
2016-03-16 10:56:29 +08:00
@ming2281
@czheo
路由上都提示 正则错误,?+* follows nothing

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/263832

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX