当我尝试为 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 数据检查匹配项时它不返回匹配项?有人遇到过这个吗?
如果你想
忽略非字母数字并且不在字符串开头引用字符,你可以这样做:
$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"
}
当您给出您提到的静态值时,它不会返回匹配项。
$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文件中,开头可能会有空格。因为您期望键将从第一个字母本身 ( ^) 开始。
尝试使用
$htmlfile = file_get_contents($url);
$html = <<<HTML
echo $htmlfile;
HTML;
因为您读取并保留了文件的内容,但这样就无法处理