簡體   English   中英

正則表達式-PHP Preg Match

[英]Regular expression - PHP Preg Match

我正在學習使用正則表達式,並希望從表中獲取一些數據:

該文件如下所示:

$subject = 
<tbody>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>4</td>
                <td>5</td>
                <td>6</td>
            </tr>
        </tbody>

目前,我正在執行以下操作:

$pattern = "/<tr>.*?<td><\/td>.*?<td>(.*?)<\/td>.../s";

preg_match($ pattern,$ subject,$ result);

這將輸出一個數組:

$result = [
    0 => "tbody>...",
    1 => 1,
    2 => 2,
    3 => 3,
    4 => 4 ... n     
]

這似乎效率低下,所以我嘗試嘗試像這樣的重復模式:

$pattern = "/<td>([0-9]{1,2})<\/td>/s";

但是,這僅獲取第一個數字:1

最好的方法是什么?

您應該使用preg_match_all而不是preg_match對整個變量執行搜索。

http://php.net/manual/zh/function.preg-match-all.php

if (preg_match_all( $pattern, $subject, $matches)) {
    var_dump($matches);
}

這是使用解析器完成此操作的方法:

$subject = '
<tbody>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>4</td>
                <td>5</td>
                <td>6</td>
            </tr>
        </tbody>';
$html = new DOMDocument();
$html->loadHTML($subject);
$tds = $html->getElementsByTagName('td');
foreach($tds as $td){
    echo $td->nodeValue . "\n";
    if(is_numeric($td->nodeValue)) {
        echo "it's a number \n"; 
    }
}

輸出:

1
it's a number 
2
it's a number 
3
it's a number 
4
it's a number 
5
it's a number 
6
it's a number 

要獲得所有值並且在第一個匹配項后不停止,您需要使用g標志。

在php中,這是在preg_match_all函數中實現的。

由於數據將始終包含在td中,因此您可以執行以下操作:

preg_match_all("/<td>(.*)<\/td>", $subject, $matches);
var_dump($matches);

$ subject包含html的位置,您應該看到所有表數據的數組。

暫無
暫無

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

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