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 に答える