我有文本文件,它包含以零开头的数字。
我想逐行检查该文件,该数字包含10位数字,第一个数字为零。为此我使用了此正则表达式^[0][0-9]{0,9}$
文字文件结构:
0123456781
0123456782
0123456783
0123456784
PHP代码:
$array = explode("\n", file_get_contents('numbers.txt'));
像这样{p> $array
:Array ( [0] => 0123456781 [1] => 0123456782 [2] => 0123456783 [3] => 0123456784 )
foreach ($array as $key => $value) {
if (preg_match("/^[0][0-9]{0,9}$/", $value))
print_r($value);
}
我需要显示与我的正则表达式匹配的所有数字。但它只显示最后一个数字。
答案 0 :(得分:2)
您可以使用preg_grep
file
函数来完成此操作而无需循环:
$valids = preg_grep('/^0\d{9}\R?$/', file("data.txt"));
print_r($valids);
这将输出文件data.txt
中包含正则表达式为0
和9 digits
的匹配行的所有行。
\R?$
用于处理DOS文件结尾的输入文件。
答案 1 :(得分:2)
您可以简单地使用preg-grep()和file()
来代替循环播放数组。$match = preg_grep('/^[0][0-9]{0,9}$/', str_replace(array("\r", "\n"), '', file("numbers.txt")));
str_replace
将删除所有换行和无回报的空格。您的$match
现在将是numbers.txt
中与您匹配的所有元素的数组。
答案 2 :(得分:1)
您需要trim
$value
,因为它最后可能有空格或换行符。
foreach ($array as $key => $value) {
if (preg_match("/^0[0-9]{0,9}$/", trim($value)))
print_r($value);
}
答案 3 :(得分:1)
我想逐行检查该文件,该数字包含10位数字,第一个数字为零。
你的问题是你的正则表达式:
"/^[0][0-9]{0,9}$/"
需要
"/^[0][0-9]{9}$/"
接下来,为了修剪你的数组,你可以这样做:
$trimmed_array=array_map('trim', $array);
foreach ($trimmed_array as $key => $value) {
...
}