我现在在我的网站上有一个csv上传,当我尝试为csv的第一行做pregmatch时,它返回空。请参阅下面的代码。
$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数据中检查它时,为什么不返回匹配?有人遇到过这个吗?
答案 0 :(得分:2)
如果你想忽略非alphanum而不是在字符串开头引用字符,你可以这样做:
$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"
}
答案 1 :(得分: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);
OR
在您上传的csv文件中,有可能在开头有一个空格。因为您期望键将以第一个字母本身(^)开头。
答案 2 :(得分:0)
尝试使用
$htmlfile = file_get_contents($url);
$html = <<<HTML
echo $htmlfile;
HTML;
因为您阅读并保留了文件的内容,但这种方式无法处理