对不起提前,这可能是一个有点挑战性阅读...正则表达式的问题与*懒惰
我试图解析线(实际上从IMAP服务器主题行),看起来像这样:
=?utf-8?Q?Here is som?= =?utf-8?Q?e text.?=
这有点难看,但在上面的行中有两个=?/?=
对。 (总会有一对;理论上可能有很多。)在这两个=?/?=
对的每一对中,我想要提取第三个参数(由?
分隔符定义)。 (第一对,它是“这里是SOM”,并在第二个它的“电子文本。”)
下面是我使用的正则表达式:
=\?(.+)\?.\?(.*?)\?=
我想它返回两场比赛,每对=?/?=
一对。相反,它将整条线路作为单个匹配返回。我原以为(.*?)
中的?
为了让*
运算符懒惰,就不会发生这种情况,但显然它不会。
有什么建议吗?
编辑:根据以下建议取代“。?”与“[^(\?=)]?”我现在试图做的:
=\?(.+)\?.\?([^(\?=)]*?)\?=
...但它不工作,要么。 (我不确定[^(\?=)] *?是否是排除双字符序列的正确方法,如“?=”。是否正确?)
有效的建议,但你修改了错误的参数:它应该是第二组圆括号,而不是第一组。 (参见上面我的编辑。)另外,结尾分隔符是一个?=,而不仅仅是一个?。我该如何测试?谢谢。 –