0

csv の最初の行に対して pregmatch を実行しようとすると、サイトに csv アップロードがあり、空が返されます。以下のコードを参照してください。

 $uploaded_file = $upload_dir . $_FILES['my_upload_file']['name'];
 $uploaded_content = file( $uploaded_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );
 $regx_pattern = '/^(nickname|nick_name|family_name|\"nickname|"family_name)_/'; 
 $first_row = array_shift( $uploaded_content );
 $row_match = preg_match( $regx_pattern , $first_row, $matches );
 var_dump($matches);

結果:

array
    empty

$first_rowしかし、次のようにしてスクリプトで静的値として宣言すると:

$first_row= 'nickname,nick_name_initial,nick_name_code';

一致を返します。csv データからチェックしているときに一致が返されないのはなぜですか? 誰もこれに遭遇しましたか?

4

3 に答える 3

2

英数字以外を無視し、文字列の先頭の文字を引用符で囲まないようにする場合は、次のようにします。

$regx_pattern = '/^[^\w"]*(nickname|nick_name|family_name|\"nickname|"family_name)_?/';
// $first_row = array_shift( $uploaded_content );
$first_row = 'nickname,nick_name_initial,nick_name_code';
$row_match = preg_match( $regx_pattern , $first_row, $matches );
var_dump($matches);

出力:

array(2) {
  [0]=>
  string(14) "nickname"
  [1]=>
  string(8) "nickname"
}
于 2012-07-04T11:30:38.810 に答える
1

あなたが述べたように静的な値を与えるとき、それは一致を返しません。

$regx_pattern = '/^(nickname|nick_name|family_name|\"nickname|"family_name)_/'; 
//$first_row = array_shift( $uploaded_content );
$first_row= 'nickname,nick_name_initial,nick_name_code';
$row_match = preg_match( $regx_pattern , $first_row, $matches );
var_dump($matches);

正規表現では、キーの後にアンダースコアが必要であり、指定した静的な値では、キーのニックネームに最後のアンダースコアがないため、機能しません。以下のようにオプションにする必要があります。

$regx_pattern = '/^(nickname|nick_name|family_name|\"nickname|"family_name)(_)?/'; 
//$first_row = array_shift( $uploaded_content );
$first_row= 'nickname,nick_name_initial,nick_name_code';
$row_match = preg_match( $regx_pattern , $first_row, $matches );
var_dump($matches);

また

アップロードするcsvファイルの最初に空白が含まれている可能性があります。キーは最初の文字自体(^)で始まることを期待しているためです。

于 2012-07-03T13:09:54.500 に答える
0

使ってみてください

$htmlfile = file_get_contents($url);

$html = <<<HTML
echo $htmlfile;
HTML;

ファイルの内容を読み取って保持しますが、その方法では処理できません。

于 2012-07-03T11:42:45.280 に答える