1

私は次の文字列を持っています:

<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:(.*?)"

"Customer Email"上記の正規表現をNotepad++でテストすると、メールアドレスだけでなく、メールアドレスの直後まで(およびそれを含む)すべてが一致し"ます。

メールアドレスと一致する正規表現が必要です。正規表現がそれを実行する必要があるプラットフォームはNotepad++です。

で一致する必要があるものだけでなく、すべてに一致する理由に関するアイデア(.*?)

4

3 に答える 3

2

JavaScriptを使用できるので、次の解決策をお勧めします。HTMLの解析に使用してはならない正規表現よりも優れていると思います。

これが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

正規表現を使用するよりも優れたアプローチである理由については、この質問を参照してください。


正規表現では、これは通常、後読みで行われます。

(?<=Customer Email.*?mailto:)(.*?)(?=")
于 2013-03-19T02:08:54.480 に答える
0

一致するものとキャプチャするものはまったく異なります。キャプチャグループにあるものだけをキャプチャします。実際にコードで使用してみてください。

于 2013-03-19T02:09:48.823 に答える
-1

*はワイルド文字です。だから、それはすべてに一致するでしょう。?1つのワイルドキャラクターです。だから、それがすべてに一致している理由です。

于 2013-03-19T02:10:50.883 に答える