0

现在,当我尝试对 csv 的第一行进行预匹配时,我的站点中有一个 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 回答