空格和制表符之间的单词(或:按字母顺序排序考勤报告)



我试图提取出勤报告的姓氏,以便按姓氏的字母顺序排序。考勤报告(应该是.cvs文件)如下所示:

Artur Testme    Left    27.1.2021, 10:34:15

(标签是为文章提取的,所以这里:

Artur Testme [Tab] Left [Tab] 27.1.2021, 10:34:15)

我通过fgetcsv打开它,找到空格和制表符之间的单词:

if (($handle = fopen($_FILES["file"]["test.cvs"], "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {   
preg_match('/(s)(.*)(t)/', $data[0], $matches);
echo $matches[0]."<br>"; 
}
fclose($handle);
} 
?>

输出如下所示:Testme左

我不明白为什么我也用第二个词。我的理解是,它应该取空格和制表符之间的单词。我希望有人能帮我这个忙。

顺便说一句:如果你能找到一种又好又快的方法来按字母顺序对所有数据进行排序,并在考勤报告中去掉双数…这对我有很大的帮助,节省了我在谷歌上花费的时间。:)

谢谢!问候丹尼尔

关于regex问题,.*匹配整行(也包括空格和制表符),然后返回以匹配最后一个制表符。这就是为什么第二组也包含第二个单词。

使用s也匹配换行符或制表符。您可以使用h来匹配水平空白字符,但使用否定字符类[^Ht]

的制表符除外。您可以使用w+匹配1个或多个单词字符,或使用S+匹配1个或多个非空白字符。

$pattern = '/[^Ht](w+)t/';
$s = 'Artur Testme  Left    27.1.2021, 10:34:15';
if (preg_match($pattern, $s, $matches)) {
var_dump($matches[1]);
}

输出
string(6) "Testme"

最新更新