【问题标题】:preg_match not working with text file in phppreg_match 不适用于 php 中的文本文件
【发布时间】:2013-07-26 10:57:02
【问题描述】:

在 php 中循环一个文本文件,我使用 preg_match 来检测该行是否包含“default”,并在该单词后放置一个逗号而不是空格,但它不起作用:

   $FSCS = "";

 //Read the txt file
if(($handle = fopen("FSCS.txt", "r")) != false)
{
//Loop through each line
  while(($data = fgetcsv($handle, 1000, ",")) != false)
  {
    if(preg_match("/default/", $data[0])) $FSCS .= str_replace("default ", "default,", trim($data[0]))."\n";        

    else $FSCS .= trim($data[0]).",";
  }
}

每一行都由“else”语句处理

【问题讨论】:

  • default 需要存在于该行的第一个单元格中,而不是该行的其余部分。
  • 确实如此,文本文件中的每一秒新行都包含单词 default。如果我在最后回显 $FSCS,则每一行都用逗号分隔。但 default 后面仍然有一个空格而不是逗号。
  • @user2622416 原因是你在str_replace搜索“default”之前修剪了$data[0]的内容,所以trim函数从“default”中删除了尾随空格然后str_replace 不能再匹配“默认”了
  • 尝试向我们提供一些示例输入数据和预期结果。你可以试试这样的:pastebin.com/CwJdMBbB

标签: php text preg-match str-replace


【解决方案1】:
$FSCS = "";

//Read the txt file
if (($handle = fopen("FSCS.txt", "r")) != false)
{
    //Loop through each line
    // Use fgets to read the whole line and use fgetcsv to read and parse a CSV file
    while(($data = fgets($handle, 1000)) != false)
    {
        // The \s matches whitespace
        if (preg_match("/default\s/", $data))
        {
            $FSCS .= preg_replace("/default\s/", "default,", $data) . "\n";        
        }
        else
        {
            $FSCS .= $data . "\n";
        }
    }
}

【讨论】:

  • 谢谢,不幸的是它不起作用,说“警告:fgets() 最多需要 2 个参数,3 个”。如果我从 fgets 中删除 ",",现在每隔一行都是中文"
  • @user2622416 我已经更新了我的答案以删除“,”并更好地匹配“默认”之后的空格。原始文件中的每一行都是中文吗?您是否故意指定 1000 作为行长?
  • 第二行(里面有默认),还是中文的
  • 第二行的示例是“Declared in default 26th July 2011”。我已经删除了 1000 个,还是一样
  • 中文问题已修复,我正在回显输出的页面上没有 DOCTYPE。
猜你喜欢
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 2016-07-09
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 2012-11-03
相关资源
最近更新 更多