2011-03-01 37 views
1

我是一个试图在文本文件中搜索某些序列号的新手。我正在使用PHP 5,并且正在读取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>'; 
} 
+0

只是做,我得到了45分钟回家,所以我会一次回答任何问题我到那里了。感谢您的帮助 – Drewdin

+0

如果序列号后跟一个逗号,为什么您的正则表达式要求*后面没有逗号? –

+0

@Mark感谢您的建议,如果我删除$是否正确更改正则表达式?谢谢 – Drewdin

回答

4

这将有助于如果你发布你的代码,但我猜你需要使用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

+0

我实际上使用preg_split,因为我正在通过序列号分割文本。我会发布代码 – Drewdin

+0

这非常有帮助,感谢马克! – Drewdin

0

我刚刚测试了你的正则表达式和序列号匹配。您可以使用PHP preg_match的this online tester。如果您发布的其他序列号,如果你在最后做这样的事情i指定忽略的情况下这将是很好,

$regex = "/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/i";