2016-10-06 19 views
0

まで、私は、HTMLコードの部分を持っている:正規表現がマッチ単語「のmailto」

<tr style="padding:0;vertical-align:top;text-align:left"> 
          <td style="word-break:break-word;border-collapse:collapse;padding:5px 10px;vertical-align:top;text-align:left;color:rgb(51,51,51);font-family:Helvetica,Arial,sans-serif;font-weight:bold;margin:0;line-height:19px;font-size:14px;width:270px;border-bottom:1px dotted rgb(212,212,212);border-left:none"> Traveler email </td> 
          <td style="word-break:break-word;border-collapse:collapse;padding:5px 10px;vertical-align:top;text-align:left;color:rgb(51,51,51);font-family:Helvetica,Arial,sans-serif;font-weight:normal;margin:0;line-height:19px;font-size:14px;width:270px;border-bottom:1px dotted rgb(212,212,212)"> 
          <div align="right"> 
          <a href="mailto:[email protected]" style="color:rgb(42,110,187);text-decoration:none" target="_blank">[email protected]</a> 
          </div> </td> 
          </tr> 

私は旅行者のメールアドレスを取得したいです。私はいくつかの電子メールアドレスがあるので、単語mailtoに直接正規表現することはできません。だから私はTraveler emailから正規表現を開始すると、より具体的になると思う。
これは私が作った式である:

/Traveler\semail+([^mailto:]+)/ 

しかし、それは動作しません。
あなたのアドバイスをお試しください、ありがとうございます。

+0

'email +'と '[^ mailto:]'はあなたがしているとは思わない。 – Biffen

+0

[正規表現の学習](http://stackoverflow.com/questions/4736/learning-regular-expressions) – Biffen

+0

の可能な複製@biffen私は逃した、ありがとう。 –

答えて

0

"DOTALL"フラグを使用してパターンを複数行のスニペットに適用する必要があり、 "mailto"の後に実際の電子メールアドレスを取得していないとします。他のコメント者が指摘するように、あなたのパターンにも基本的な正規表現構文の問題があります。ここで私はあなたが欲しいと思うものを行い、有益な小さなPHPファイルがあります。 "snippet.txt"の例では、PHPスクリプトのローカルであり、サンプルHTMLが含まれています。

を使用してコマンドラインでこれを実行する
<?php 
$myfile = fopen("snippet.txt", "r") or die("Unable to open file!"); 
$contents = fread($myfile,filesize("snippet.txt")); 
fclose($myfile); 
$pattern = '/Traveler\s+email.*?mailto:(.*?)"/s'; 
preg_match($pattern,$contents,$matches); 

print_r($matches); 
?> 

:あなたは結果を得る

php -f thescript.php 

Array 
(
    [0] => Traveler email </td> 
          <td style="word-break:break-word;border-collapse:collapse;padding:5px 10px;vertical-align:top;text-align:left;color:rgb(51,51,51);font-family:Helvetica,Arial,sans-serif;font-weight:normal;margin:0;line-height:19px;font-size:14px;width:270px;border-bottom:1px dotted rgb(212,212,212)"> 
         <div align="right"> 
         <a href="mailto:[email protected]" 
    [1] => [email protected] 
) 

パターン:

$pattern = '/Traveler\s+email.*?mailto:(.*?)"/s'; 

はとDOTALLフラグを設定"s"を最後に使用し、 "lazy" syを使用しますntax: "。*?"すべての文字を "?"の後に続くものまで一致させるだけです。 DOTALLがなければ、 "。*?"改行を交差しないので、あなたは一致することはありません。

+0

こんにちは、それは動作する可能性があります。最後の 's'文字は何ですか?ありがとうございました。 –

+0

sは "DOTALL"フラグを設定する "パターン修飾子"です。詳細については、[here](http://php.net/manual/en/reference.pcre.pattern.modifiers.php)を参照してください。このように複数のフラグを設定することができます。例えば ​​"s"を "si"に置き換えると、パターンは大文字と小文字を区別しません。 –

+0

ソースありがとうございます。 –