我是个菜鸟,想在文本文件里搜索序列号。我正在使用PHP5,并且我正在读出一个CSV文件。我创建了以下正则表达式:
/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/我正在查找一个相当大的文本文件,其中包含类似下面列出的序列号:
37DB4B71-DAFA-4311-9AC6-0005646CB9BC它总是找到第一个序列号,但找不到其他任何序列号。至少还有15个人,对我做错了什么有什么建议吗?我的印象是\w将找到区分大小写的数字或数字。我认为它在找到第一个实例时就起作用了。
这是我用来解析CSV文件的代码,我只是将整个文件放入其中,并尝试按序列号将其拆分成一个数组。下面是我使用的代码,看看在我做任何其他事情之前,我是否至少可以拆分序列号。现在,它向我展示了一个包含1项的数组。这一项是序列号,后面跟着一串文本和我需要的序列号。
还有一件事,我使用preg_split的原因是因为序列号后面跟着一个逗号,然后是关于序列号的一些详细信息。我试图使用Preg_split来分解文件,这样文本就会跟在序列号之后。
$searchPattern = '/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/';
//Get the contents of the File
$contents = file_get_contents('C:/files/andrew1.csv');
if ($contents === false){
echo 'Sorry, there was a problem reading the file.';
} else{
$NoHTMLContents = strip_tags($contents);
$splitContents = preg_split($searchPattern, $NoHTMLContents);
echo '<pre>';
print_r($splitContents);
echo '</pre>';
}发布于 2011-03-02 06:07:15
如果您发布了代码会有所帮助,但我猜您需要使用preg_match_all而不是preg_match,因为后者只返回第一个匹配项。
您还应该记住使用PCRE_MULTILINE pattern modifier (m):
preg_match_all('/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/m', $s, $matches);在线查看它的工作方式:ideone
对于基于preg_split的方法,请尝试使用先行:
$matches = preg_split("/\n(?=\w{8}-\w{4}-\w{4}-\w{4}-\w{12})/m", $s);在线查看它的工作方式:ideone
发布于 2011-03-02 06:13:07
我刚测试了你的正则表达式和你的序列号匹配。你可以使用PHP preg_match的this online tester。如果您发布其他序列号,并且如果您在末尾执行类似i的操作来指定忽略大小写,这将是很好的。
$regex = "/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/i";https://stackoverflow.com/questions/5160967
复制相似问题