正则表达式 - PHP Preg Match

时间:2015-12-23 16:16:53

标签: php regex

我正在学习使用正则表达式,并希望从表中获取一些数据:

该文件如下所示:

$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(     $模式,     $主题,     $结果);

这将输出一个数组:

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

这似乎效率低下,所以我试图抓住这样的重复模式:

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

但这只能获得第一个数字:1

最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

你应该使用preg_match_all而不是preg_match来对整个var进行搜索

  

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

<cfquery name="getDept" dbtype="query">
SELECT *
FROM departments
WHERE id = 13
</cfquery>

答案 1 :(得分:1)

以下是使用解析器实现此目的的方法:

$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 

答案 2 :(得分:0)

要获得所有值而不是在第一场比赛后停止,您需要使用g标志。

在php中,这是在preg_match_all函数中实现的。

由于数据将始终包含在td中,您可以执行以下操作:

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

$ subject包含html,你应该看到所有表数据的数组。