在文本文件中,我有以下字符串:
ID | LABEL | A | B | C
--------------------------------------
9999 | Oxygen Isotopes | | 0.15 | 1
8733 | Enriched Uranium | | 1 | 1
我想使用正则表达式提取字段ID
和每一行。LABEL
我怎样才能实现它?
在文本文件中,我有以下字符串:
ID | LABEL | A | B | C
--------------------------------------
9999 | Oxygen Isotopes | | 0.15 | 1
8733 | Enriched Uranium | | 1 | 1
我想使用正则表达式提取字段ID
和每一行。LABEL
我怎样才能实现它?
我不确定你为什么坚持使用正则表达式。
由于该列似乎由 | 分隔 符号,似乎使用 PHP 函数explode会是一个更简单的解决方案。
您将能够遍历这些行,并使用典型的数组索引表示法来引用每一列,例如:$line[0]
分别$line[1]
用于 ID 和 LABEL。
您可以preg_split
在每一行上使用:
$array = preg_split(`/\s*\|\s*/`, $inputLine, 2);
然后就像在 djdy 的回答中一样,ID 将在$array[0]
并且标签在$array[1]
.
不需要正则表达式:
<?php
$file = file('file.txt');
$ret = array();
foreach($file as $k=>$line){
if($k<2){continue;}
list($ret['ID'][],
$ret['LABEL'][],
$ret['A'][],
$ret['B'][],
$ret['C'][]) = explode('|',$line);
}
print_r($ret);
//Label: Oxygen Isotopes ID:9999
echo 'Label: '.$ret['LABEL'][0].' ID:'.$ret['ID'][0];
/*
Array
(
[C] => Array
(
[0] => 1
[1] => 1
)
[B] => Array
(
[0] => 0.15
[1] => 1
)
[A] => Array
(
[0] =>
[1] =>
)
[LABEL] => Array
(
[0] => Oxygen Isotopes
[1] => Enriched Uranium
)
[ID] => Array
(
[0] => 9999
[1] => 8733
)
)
*/
?>
我怀疑正则表达式是这里最好的解决方案。
试试这个将文本文件分成一组行(这可能会或可能不会起作用,具体取决于您在其上创建 txt 文件的机器的操作系统)
$lines = explode($text, "\n");
$final_lines = array();
foreach ($lines as $line) {
$parts = explode($line, " | ");
$final_lines[] = $parts;
}
现在您可以通过行号和列访问所有数据,例如
$final_lines[2][0]
将包含 8733。
正则表达式可能不是这里最好的方法。我会在每一行中读取一个字符串,并使用 String.explode("|", input) 创建一个字符串数组。0 索引是您的 ID,1 索引是您的标签,如果您愿意,A、B 和 C 依此类推。这是一个比使用正则表达式更强大的解决方案。
获取 ID 的正则表达式可能类似于
\d{4} |
您可以为标签字段做类似的事情,再次出现错误,这不像使用爆炸那么健壮。
尝试
$str = file_get_contents($filename);
preg_match_all('/^\s*(\d*)\s*\|\s*(.*?)\s*\|/m', $str, $matches);
// $matches[1] will have ids
// $matches[2] will have labels
虽然它不是在这里使用正则表达式的最佳方法,但可能是这样的
preg_match_all("/(\d{4}.?)\|(.*?)\|/s", $data, $matchs)
will 的第二个和第三个索引$matches
携带所需的数据