1

我有一个超过 20000 行的数据库。

列具有以下表达式:

<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="mail@domain.com," /></td>

我只想检索电子邮件地址;我怎么能用php做到这一点?

4

4 回答 4

2

我建议使用TRIM删除电子邮件值之前和之后的额外文本:

SELECT TRIM(TRAILING  '," /></td>'
            FROM TRIM(LEADING '<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="'
            FROM your_field)) AS email
FROM your_table;

它将起作用,因为您在评论中确认了这一点this is the exacte expression in each column only the email adress which is different

使用仅 MySQL 的解决方案将比使用 MySQL 检索数据和使用 PHP 提取电子邮件更快。它还使您能够编写查询以轻松快速地将电子邮件保存在另一个列或表中。

于 2012-08-29T22:02:29.173 回答
1

如果 HTML 在所有行中完全相同,您实际上可以在 SQL 中执行此操作,如下所示:

SELECT REPLACE(
    REPLACE(
        field_name,
        '<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="',\
        ''
    ),
    '" /></td>',
    ''
) as email
FROM table;
于 2012-08-29T22:00:45.620 回答
0

只要这种格式是完全静态的,你就可以摆脱一个相当草率的正则表达式,如下所示:

$ cat emailreg.php
<?php
$html = '<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="mail@domain.com," /></td>';
if(preg_match('@value="(?P<email>[^",]+),"@', $html, $matches)) {
    var_dump($matches['email']);
}
$ php emailreg.php
string(15) "mail@domain.com"
$
于 2012-08-29T22:02:11.080 回答
0

执行以下操作,假设 $column 包含您的列值,如下所示:

$column='<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="mail@domain.com," /></td>' ;
$xml = simplexml_load_string( $column );
echo $xml->input[0]['value'] . "\n" ;

输出示例:

mail@domain.com,

它将显示您的电子邮件。当然这很好,当你已经有了$column。如果您想像这样处理整个查询,请按照其他人的建议进行,在查询时处理它会更快。

如果您喜欢这里的功能,您可以使用:

function getmail( $column )
{
    return simplexml_load_string( $column )->input[0]['value'] ;
}

和用法:

echo getmail( '<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="mail@domain.com," /></td>' ) ;

玩得开心。

于 2012-08-29T22:09:51.700 回答