2016-11-20 7 views
0

I次のようなHTMLがあります。PHPリターン複数の一致同じREGEXパターン

<tr valign="top"> 
     <td>Name:</td> 
     <td>John Doe</td> 
</tr> 
<tr><td colspan="2">&nbsp;</td></tr> 
<tr valign="top"> 
     <td>Address:</td> 
     <td>71 view st, Fitchburg, MA 01420</td> 
</tr> 
<tr><td colspan="2">&nbsp;</td></tr> 
<tr valign="top"> 
     <td>Phone:</td> 
     <td>978-345-5391</td> 
</tr> 
<tr><td colspan="2">&nbsp;</td></tr> 
<tr> 
     <td>Email:</td> 
     <td>[email protected]</td> 
</tr> 

は、私は同じREGEXパターン内NamePhoneEmailの値をキャプチャしたい、のようなもの:

$pattern = "/Name:<\/td>\s*<td>(.*)<\/td>.*Address:<\/td>\s*<td>(.*)<\/td>.*card ([0-9].*)<\/td>/m"; 

別に試してみると:

$pattern = "/Name:<\/td>\s*<td>(.*)<\/td>/m"; 
$pattern = "/Phone:<\/td>\s*<td>(.*)<\/td>/m"; 
$pattern = "/Email:<\/td>\s*<td>(.*)<\/td>/m"; 

大丈夫。たぶん、私はREGEXの仕組みを理解していないかもしれません、単一のパターンでより多くの一致を持つことはできませんか?

+0

、典型的には、良好なアプローチではありません。それは非常に信頼性が低く、複雑です。代わりに 'DOM parser'を見てください。それらはそのようなタスクのための適切なツールです。 – arkascha

+0

DOMを使用することはできません。ファイルには完全なHTMLタグがなく、TABLEだけなのでDOMにアクセスできません。 – bsteo

+0

これは、DOMパーサを使用できないことを意味しません!最小限のHTMLフレームワークにそのテーブル定義を埋め込むだけです。 – arkascha

答えて

2

複数行の正規表現を示す例。 1.問題を解決するには最適ではありませんが、能力を示します。 2.最高の正規表現ではありませんが、末尾にsというフラグが付きます。正規表現によってHTMLマークアップを解析

<?php 
$html = <<<EOL 
<tr valign="top"> 
     <td>Name:</td> 
     <td>John Doe</td> 
</tr> 
<tr><td colspan="2">&nbsp;</td></tr> 
<tr valign="top"> 
     <td>Address:</td> 
     <td>71 view st, Fitchburg, MA 01420</td> 
</tr> 
<tr><td colspan="2">&nbsp;</td></tr> 
<tr valign="top"> 
     <td>Phone:</td> 
     <td>978-345-5391</td> 
</tr> 
<tr><td colspan="2">&nbsp;</td></tr> 
<tr> 
     <td>Email:</td> 
     <td>[email protected]</td> 
</tr> 
EOL; 

$pattern = "#Name:</td>.*<td>(.*?)</td>.*Address:</td>.*<td>(.*?)</td>.*Phone:</td>.*<td>(.*?)</td>.*Email:</td>.*<td>(.*?)</td>#s"; 

if(preg_match($pattern, $html, $matches)) { 
    printf("Name: %s\n", $matches[1]); 
    printf("Address: %s\n", $matches[2]); 
    printf("Phone: %s\n", $matches[3]); 
    printf("Email: %s\n", $matches[4]); 
} 


?> 

Yeilds

Name: John Doe 
Address: 71 view st, Fitchburg, MA 01420 
Phone: 978-345-5391 
Email: [email protected] 
関連する問題