如何从txt doc中提取多个模式

时间:2010-07-27 12:47:24

标签: php regex email url preg-match-all

我有一个文本文档,其中列出了包含主题和电子邮件地址的网址。我需要提取所有网址及其主题和电子邮件地址,并将其全部放入csv文件中。我只需要知道如何使用正则表达式来做到这一点。目前我能够提取所有网址,但我需要与他们相关的电子邮件和主题。这就是我到目前为止所做的工作:

$file=file_get_contents('/data/urls.txt');
$pattern='([A-Za-z][A-Za-z0-9+.-]{1,120}:[A-Za-z0-9/](([A-Za-z0-9$_.+!*,;/?:@&~=-])|%   [A-Fa-f0-9]{2}){1,333}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*,;/?:@&~=%-]{0,1000}))?)';
preg_match_all($pattern, $file, $matches);

$matches=array_unique($matches[0]);

print_r($matches);

文件结构:

主题:网址

电子邮件:someemail@email.com

来源网址:http://www.google.com

2 个答案:

答案 0 :(得分:1)

这个正则表达式怎么样?

$pattern='/(Subject: (.*)\n\nEmail: (.*)\n\nSource URL: (.*))/';

答案 1 :(得分:1)

这样的事情对你有用,这取决于你如何在输入中使用“独特”一词。

// reformat file
$pattern = '/Subject: (.*)[\n\r]+Email: (.*)[\n\r]+Source URL: (.*)[\n\r]*/';
$replace = '$1, $2, $3'."\n";
$output = preg_replace($pattern, $replace, $input);

// filter unique
$arr = explode("\n", $output);
$arr = array_unique($arr);

// output
$f = fopen('path.csv', 'w');
foreach($arr as $a) {
    fwrite($f, $a);
}
fclose($f);