只读 string/line PHP 的某些部分

Read only certain parts of string/line PHP

我有一个文件 (.txt),格式如下:

DOE,JOHN K V00008483028 FB 1444.00
1444.00 1444.00 DOE,JANE HAHN V00008475645 FB 6579.00 -6579.00

我需要找到一种方法来仅从每一行中提取具有帐号的部分,即。 V0000.... 文件中没有定界符,这就是问题所在。

使用explode.

explode(' ', $line)[2]

^- 这将产生 "V00008483028"

但是 如果您为每行使用了准确的空格数。如果 John Doe 有中间名,这将行不通。在这种情况下没有好的解决方法。然后您将不得不使用不同的分隔符,例如 |.

空格可以用作分隔符:

$line  = "DOE,JOHN K V00008483028 FB 1444.00 1444.00 1444.00";
$lineParts = explode(" ", $line);

print_r($lineParts);

您也可以使用正则表达式来提取帐号:

preg_match('^V/[0-9]{12}/',$line,$matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);

假设帐号中有 12 个数字

您可以使用 str_getcsv 逐行解析。此外,它的 return 按数组排列。 详细信息:str_getcsv

$csvString = 'DOE,JOHN K V00008483028 FB 1444.00
1444.00 1444.00 DOE, JANE HAHN V00008475645 FB 6579.00 - 6579.00 ';

$rows = str_getcsv($csvStrin, "\n"); //parse the rows 
foreach($rows as $row) {
    $val = str_getcsv($row, ";"); //parse the items in rows 
    if (strstr($val[3], 'V0000')) {
        //found V0000
    }
}

这个怎么样。希望对您有所帮助

$file = "file.txt";
$f = fopen($file, 'rb');
$found = false;
while ($line = fgets($f, 1000)) {
    if ($found) {
       echo $line;
       continue;
    }
    if (strpos($line, "V00008") !== FALSE) {
      $found = true;
    }
}

格式总是以 V0000 开头吗?如果是这样,这将起作用并将结果存储在一个简单的数组中。如果不是,可以修改正则表达式以满足您的需要,例如'/(V\d+)/.

$str = file_get_contents('./file.txt');
$matches = [];
preg_match('/(V0000\d+)/', $str, $matches);
$matches
//=> [
//=>  "V00008483028",
//=>  "V00008483028",
//=>]