正则表达式实现 非pattern ^((?!pattern).)+$

需求:

我希望他遇到v2ray.com本身和google.com及其子域名時不匹配

其他域名都匹配

答案:

^((?!(^v2ray.com$|^google\.com$|^.*\.google\.com$)).)+$

参考:

学习正则表达式规范:

https://www.runoob.com/regexp/regexp-syntax.html

测试正则表达式工具:

https://regex101.com/

https://tool.chinaz.com/regex

正则表达式"非"字符串的匹配

https://www.1kmb.com/note/160.html


思路:

"遇到v2ray.com本身和google.com及其子域名時不匹配" 
= (非v2ray.com) AND (非google.com) AND (非*.google.com) 
= 非(v2ray.com OR google.com OR *.google.com)


实施过程:

匹配v2ray.com

^v2ray.com$

匹配google.com

^google\.com$

匹配*.google.com

^.*\.google\.com$

(v2ray.com OR google.com OR *.google.com)

(^v2ray.com$|^google\.com$|^.*\.google\.com$)

非 (pattern)

^((?!pattern).)+$

非(v2ray.com OR google.com OR *.google.com)

^((?!(^v2ray.com$|^google\.com$|^.*\.google\.com$)).)+$

 

验证表达式:



在程序中验证:

v2fly/v2ray:

在加载配置文件时报错

2022/07/25 12:10:51 [Info] main/jsonem: Reading config: /usr/local/etc/v2ray/config.json
main: failed to create server > app/router: failed to build domain condition > app/router: failed to create domain matcher > error parsing regexp: invalid or unsupported Perl syntax: `(?!`

https://github.com/v2fly/v2ray-core/issues/1885

PAC文件 via v2rayN:

正常

/^((?!(^ip.sb$|^google\.com$|^.*\.google\.com$)).)+$/



评论

The Hot3 in Last 30 Days