一个正则表达式写不出来

2019-02-22 18:36:47 +08:00
 liuxu
To: =?GB2312?B?s8LR9A==?= , =?GB2312?B?0e7V8buq?= , =?GB2312?B?ts69qNOi?= , =?GB2312?B?wO7RxcX0?= , =?GB2312?B?wfXX07vU?= Cc: =?GB2312?B?wfXA2g==?= , =?GB2312?B?wfW7qNHT?= Subject: =?GB2312?B?u9i4tDogu9i4tDogcGPXqNawvNK9zMrTxrVidWc=?=

如何匹配 To 到 Cc:之间的字符串,Cc:有时候可能不存在,所以不能用 To:( =\?.*\?= )Cc:,想了半天没想出来,求解答,谢谢
3457 次点击
所在节点    PHP
12 条回复
xiangyuecn
2019-02-22 18:51:50 +08:00
邮件头格式还是蛮复杂的,可能跨多行

To: ([^\r\n]+(?:\r\n\s+[^\r\n]+)*)
Telegram
2019-02-22 18:55:15 +08:00
注意冒号:

=\?[^:]*\?=
Telegram
2019-02-22 18:57:23 +08:00
从 To:开始,?=结尾,中间不能含有冒号:,问题解决
laoyur
2019-02-22 18:57:27 +08:00
To: (?:\s*=\?.+?\?=\s*,?)+
xiangyuecn
2019-02-22 18:57:44 +08:00
\r\n 有点问题。。。不研究了
Raisu
2019-02-22 18:58:13 +08:00
用 split
lastpass
2019-02-22 19:12:41 +08:00
用 antlr
liuxu
2019-02-22 19:16:57 +08:00
@laoyur 多谢大佬,试过这个,最后,?一直没想到
bzw875
2019-02-22 19:18:32 +08:00
str = str.split('fuck:')[0]
str = str.replace('To', '')
junkman
2019-02-22 19:23:22 +08:00
To:( =\?.*\?= )(Cc|Subject):

NOTE: Assume `Subject' always present

see: https://regex101.com/r/l7xxeN/2/
junkman
2019-02-22 19:25:44 +08:00
Only one addressee case failed :-(
bzw875
2019-02-22 19:26:28 +08:00
str = str.split('Cc:')[0];
str = str.replace('To', '');
不小心写错了,其实代码可以实现的地方,别用正则表达式,可读性差

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

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

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

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

© 2021 V2EX