我有以下字符串:
<p class=MsoNormal><b>Customer Email: <o:p></o:p></b></p></td><td width=""75%"" valign=top style='width:75.0%;border:none;padding:0in 0in 11.25pt 0in'><p class=MsoNormal><a href=""mailto:username@gmail.com""">
我正在尝试使用正则表达式从上面的字符串中捕获电子邮件地址(username@gmail.com)。我正在使用以下正则表达式:
Customer Email.*?mailto:(.*?)"
在Notepad ++中测试上述正则表达式,而不仅仅是匹配电子邮件地址,它匹配从(包括)"Customer Email"
一直到电子邮件地址后面的"
的所有内容。< / p>
我需要正则表达式才能匹配电子邮件地址,正则表达式必须执行的平台是Notepad ++
有关为什么匹配所有内容的想法,而不仅仅是(.*?)
答案 0 :(得分:2)
由于您可以使用JavaScript,我建议使用以下解决方案。我认为这比使用 NOT 以任何方式解析HTML的正则表达式更好。
这是how I would do it in JavaScript
var a = document.createElement("div"); //create a wrapper
a.innerHTML = '<p class=MsoNormal><b>Customer Email: <o:p></o:p></b></p></td><td width="\"75%\"" valign=top style=\'width:75.0%;border:none;padding:0in 0in 11.25pt 0in\'><p class=MsoNormal><a href="mailto:username@gmail.com">'; //your data
var ps = a.querySelectorAll("p"); //get all the p tags
var emails = [];
[].forEach.call(ps,function (pTag) { //for each p tag
if(pTag.textContent.indexOf("Customer Email")===-1){
return;//only add those with Costumer Email
}
var as= (pTag.querySelectorAll("a")); //get the links from it
[].forEach.call(as,function(aTag){
if(aTag.href && aTag.href.substring(0,7)==="mailto:"){ //for mailto links
//got a match
emails.push(aTag.href.substring(7)); //add the email address
}
});
});
console.log(emails); //emails now contains an array of your extracted emails
请参阅this question,了解为什么它比使用正则表达式更好。
在正则表达式中,这通常使用lookbehind
完成(?<=Customer Email.*?mailto:)(.*?)(?=")
答案 1 :(得分:0)
匹配的内容以及捕获的内容完全不同。它只会捕获捕获组中的内容。尝试在代码中实际使用它。
答案 2 :(得分:-1)
*是狂野的角色。所以它将匹配一切。 ?是一个狂野的角色。这就是为什么它匹配所有东西。