我有一个超过20000行的数据库。
列有这个表达式:
<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="mail@domain.com," /></td>
我想只检索电子邮件地址;我该怎么用php?
答案 0 :(得分: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来提取电子邮件。它还使您能够编写查询,以便轻松快速地将电子邮件保存在另一列或表中。
答案 1 :(得分: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;
答案 2 :(得分: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"
$
答案 3 :(得分: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>' ) ;
玩得开心。