首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式帮助,找不到我需要的内容

正则表达式帮助,找不到我需要的内容
EN

Stack Overflow用户
提问于 2011-03-02 06:05:46
回答 2查看 245关注 0票数 1

我是个菜鸟,想在文本文件里搜索序列号。我正在使用PHP5,并且我正在读出一个CSV文件。我创建了以下正则表达式:

代码语言:javascript
复制
/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/

我正在查找一个相当大的文本文件,其中包含类似下面列出的序列号:

代码语言:javascript
复制
37DB4B71-DAFA-4311-9AC6-0005646CB9BC

它总是找到第一个序列号,但找不到其他任何序列号。至少还有15个人,对我做错了什么有什么建议吗?我的印象是\w将找到区分大小写的数字或数字。我认为它在找到第一个实例时就起作用了。

这是我用来解析CSV文件的代码,我只是将整个文件放入其中,并尝试按序列号将其拆分成一个数组。下面是我使用的代码,看看在我做任何其他事情之前,我是否至少可以拆分序列号。现在,它向我展示了一个包含1项的数组。这一项是序列号,后面跟着一串文本和我需要的序列号。

还有一件事,我使用preg_split的原因是因为序列号后面跟着一个逗号,然后是关于序列号的一些详细信息。我试图使用Preg_split来分解文件,这样文本就会跟在序列号之后。

代码语言:javascript
复制
$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>';
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-02 06:07:15

如果您发布了代码会有所帮助,但我猜您需要使用preg_match_all而不是preg_match,因为后者只返回第一个匹配项。

您还应该记住使用PCRE_MULTILINE pattern modifier (m):

代码语言:javascript
复制
preg_match_all('/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/m', $s, $matches);

在线查看它的工作方式:ideone

对于基于preg_split的方法,请尝试使用先行:

代码语言:javascript
复制
$matches = preg_split("/\n(?=\w{8}-\w{4}-\w{4}-\w{4}-\w{12})/m", $s);

在线查看它的工作方式:ideone

票数 4
EN

Stack Overflow用户

发布于 2011-03-02 06:13:07

我刚测试了你的正则表达式和你的序列号匹配。你可以使用PHP preg_match的this online tester。如果您发布其他序列号,并且如果您在末尾执行类似i的操作来指定忽略大小写,这将是很好的。

代码语言:javascript
复制
$regex = "/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/i";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5160967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档