从数据php regx中删除一些内容

时间:2018-07-19 20:50:40

标签: php

我想从数据文件中删除(删除)345345。 数字可以是任何东西。

abc@gmail.com (deleted)395343
aab@gmail.com (deleted)2342322

我想要类似的数据 例如。 abc@gmail.com

2 个答案:

答案 0 :(得分:1)

<?php
$data = 'abc@gmail.com (deleted)395343' . PHP_EOL
      . 'aab@gmail.com (deleted)2342322';

$cleaned = preg_replace('/^([^\s]+).+$/m', '$1', $data);

在上面的示例中,我们将所有内容保留在该行的开头,直到捕获组中的第一个空格(用我们的匹配替换整个行)为止。

但是对于大文件,这将变得非常昂贵。 最好逐行处理文件,并询问结构是否如示例中所述,是否真的需要正则表达式。 以及为什么要删除不想要的数据而不仅仅是提取您想要的数据?

一些例子:

$fp = fopen('someFile.txt', 'r') or die('unable to open file');

while (($line = fgets($fp)) !== false) {
    if (strpos($line, '(') === false) {
        continue;
    }

    $email = rtrim(mb_substr($line, 0, mb_strpos($line, '(')));
    printf('found: %s'.PHP_EOL, $email);
}
fclose($fp);

在此示例中,我们逐行处理文件,并且仅通过假设电子邮件地址位于每行的第一个左括号之前来提取电子邮件地址-跳过任何没有左括号的行。

答案 1 :(得分:0)

在处理文件之前,您必须先读取文件。在这种情况下,使用file()分别读入各行可能会更有用。

在那之后,我们将按照您已经完成的工作(但是您没有发布任何代码)进行操作,并使用preg_replace()

<?php
$data=file("data.txt",FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
foreach($data as $key=>$line){
    $data[$key]=preg_replace('/ \(deleted\)[0-9]+$/m',$line,'');
}
?>

现在$data将包含带有“有趣”信息的行。