0

.html ファイルでいくつかのタグを検索したいこの単純なコードがありますが、いくつかのエラーが発生します。私は php を初めて使用し、「preg_match」コマンドに遭遇しました。

ここに私の簡単なコードがあります:

<?php
$data['id="test"'] = 'A';

$html = file_get_contents('test.html');

if(preg_match(array_keys($data), $html)) 
{
    echo 'FOUND';
}
else
{
    echo 'NOT FOUND';
}
?>

それは私にエラーを与えます警告: preg_match() は、パラメーター 1 が文字列、配列で指定されることを期待しています

上記のコードは、「id=test」 test がtest.htmlファイルに存在する場合、 test.htmlを検索します。

4

2 に答える 2

1

少なくとも、これを行う必要があります。

<?php
$data['id="test"'] = 'A';
$data=array_keys($data);
$data = preg_quote($data[0],"'");

$html = file_get_contents('test.html');

if(preg_match('~'.$data.'~', $html)) 
{
    echo 'FOUND';
}
else
{
    echo 'NOT FOUND';
}
?>

ただし..構造をリファクタリングする意思がある/できる場合、これを最適化する方法はたくさんあります$data

また、これは完全一致のみを検索することに注意してください。"test"がシングルクォートで囲まれている場合や、との間にスペースがある場合などはid一致しません"test"

要するに、あなたが今持っている方法で、あなたはそのまま使うことができますstrpos

于 2013-11-06T23:27:28.173 に答える
1

preg_match には最初のパラメーターが文字列である必要があることがわかります

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

そのarray_keysの戻り値は「配列」です

array array_keys ( array $array [, mixed $search_value = NULL [, bool $strict = false ]] )

したがって、「preg_match() はパラメーター 1 が文字列、配列が指定されていることを期待しています」

これを試して :

$data[] = 'id="test"';
$data[] = 'id="test2"';
$data[] = 'id="test3"';
$html = file_get_contents('test.html');
foreach ($data as $search){
 if (strpos($html , $search) !== FALSE)
    echo 'FOUND';
 else
    echo 'NOT FOUND';
}
于 2013-11-06T23:24:16.040 に答える