我正在编写一个代码,它将从大约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的每个实例,并使用以下数字字符(逗号(,)除外)。虽然我使用了正则表达式但是如果还有其他方法可以使用我也会感激不尽。我只想在最短的时间内完成这项工作
答案 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
位数的值开头的部分。