【问题标题】:Regular expression - PHP Preg Match正则表达式 - PHP Preg Match
【发布时间】:2016-03-30 03:04:57
【问题描述】:

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

文件如下所示:

$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

最好的方法是什么?

【问题讨论】:

  • 你的意思是你想要g标志?...
  • 我不确定,这是我第一次使用正则表达式。
  • s 修饰符也不会影响您当前的正则表达式,因为您没有 .

标签: php regex


【解决方案1】:

您应该使用 preg_match_all 而不是 preg_match 对整个 var 执行搜索

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

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

【讨论】:

  • 哦,那可能会奏效。是否可以为此添加 AND 运算符?
  • 你是什么意思?你想做什么?
  • 我想首先匹配表中的给定模式:.. 然后提取一些静态数据:data 然后获取一些进一步的模式......或者最好在单独的查询中执行此操作?
  • 为了更清晰的代码,我建议在单独的查询中进行,这取决于正则表达式的复杂性
【解决方案2】:

要获取所有值并且在第一次匹配后不停止,您需要使用 g 标志。

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

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

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

其中 $subject 包含您的 html,您应该会看到所有表格数据的数组。

【讨论】:

    【解决方案3】:

    这是使用解析器完成此任务的一种方法:

    $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 
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多