20000 行を超えるデータベースがあります。
列には次の式があります。
<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="mail@domain.com," /></td>
また、メール アドレスのみを取得したいと考えています。どうすればphpを使用してそれを行うことができますか?
20000 行を超えるデータベースがあります。
列には次の式があります。
<td align="left" valign="top"><input name="mail" type="hidden" id="mail" value="mail@domain.com," /></td>
また、メール アドレスのみを取得したいと考えています。どうすればphpを使用してそれを行うことができますか?
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 を使用して電子メールを抽出するよりも高速になります。また、クエリを記述して、電子メールを別の列またはテーブルに簡単かつ迅速に保存することもできます。
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;
この形式が完全に静的である限り、以下に示すようにかなりずさんな正規表現を使用できます。
$ 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"
$
以下に示すように、 $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>' ) ;
楽しむ。