簡體   English   中英

PHP返回多個匹配相同的REGEX模式

[英]PHP return multiple matches same REGEX pattern

我有以下HTML:

<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>johndoe@cs.com</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的工作原理,是否不可能在單個模式中進行更多匹配?

顯示多行正則表達式的示例。 1.不是解決問題的最佳方法,而是說明能力。 2.不是最好的正則表達式,但重點是末尾的s標志。

<?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>johndoe@cs.com</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]);
}


?>

產量

Name: John Doe
Address: 71 view st, Fitchburg, MA 01420
Phone: 978-345-5391
Email: johndoe@cs.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM