使用php使用正则表达式打印文件中所有出现的字符串

时间:2014-03-18 21:44:13

标签: php regex string file

我正在编写一个代码,它将从大约500页的文件中打印字符串的所有实例。 这是一些代码:

$file = "serialnumbers.txt";
$file_open = fopen($file, 'r');

$string = "\$txtserial";
$read = fread($file_open,'8000000');
$match_string = preg_match('/^$txtserial/', $read, $matches[]=null);
for($i = 0; sizeof($matches) > $i; $i++)
{
echo "<li>$matches[$i]</li>";
}

所有序列号都以“$ txtserial”开头,后跟大约10个数字字符,其中一些以逗号(,)分隔。示例:$ txtserial0840847276,8732569089。 我实际上正在寻找一种方法来打印$ txtserial的每个实例,并使用以下数字字符(逗号(,)除外)。虽然我使用了正则表达式但是如果还有其他方法可以使用我也会感激不尽。我只想在最短的时间内完成这项工作

2 个答案:

答案 0 :(得分:0)

这里有一个问题,你在尝试使用字符串变量创建一个正则表达式:

$match_string = preg_match('/^$txtserial/', $read, $matches[]=null);

您可以使用:

$match_string = preg_match('/^' . preg_quote($txtserial) . '/', $read, $matches);

答案 1 :(得分:0)

使用preg_match_all()函数尝试此示例:

$txtserial = 'MSHKK';
$read = 'MSHKK1231231231,23
MSHKK1231231
txtserial123123109112
MSHKK1231231111,123123123';

$match_string = preg_match_all('/(?:^|(?<=[\n\r]))('.preg_quote($txtserial).'\d{10})\b/', $read, $matches);
print_r($matches[1]);

输出:

[0] => MSHKK1231231231
[1] => MSHKK1231231111

它基本上是选择以$txtserial持有且后跟10位数的值开头的部分。