preg_match当数据来自 CSV 时不返回匹配值


preg_match not returning match value when data is from csv

当我尝试为 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;

因为您读取并保留了文件的内容,但这样就无法处理