【问题标题】:Removing new lines containing spaces删除包含空格的新行
【发布时间】:2018-02-20 10:14:38
【问题描述】:

我有一个文本文件 test.txt:

this is test line
  another line
2146554
 145648
    DATE 2017-12-12

USR-PASSWORD *\#5%*sdfdaw*eewaqd*

 TYPE ---NULLS--- TBL
PWD-TOD 2018-01-01
 EDBS
  18/01/02 KEYFROM 


 SDBS

在您看到空行的地方,它们实际上包含 3 个空格。我已经能够删除任何包含特定单词的行:

<?php
$file = file('test.txt'); 
$key = '17.2';
$cleaned = array();

//CLEANUP START
$unwanted_words = array(" DATE", "USR-PASSWORD", "PWD-TOD", "KEYFROM ");
$unwanted_words_match = '(?:' . join('|', array_map(function($word) {
    return preg_quote($word, '/');
}, $unwanted_words)) . ')';

$replace_match = '/^.*' . $unwanted_words_match . '.*$[\r\n]/m';
$result = preg_replace($replace_match, '', $file);

foreach ($result as $key => $value) {
  if(!empty($value)) {
    $cleaned[] = $value;
    echo  $value . "<br />";
  }
}

?>

最后一步是删除那些带有 3 个空格的行。我试过了

\n[ ]{3,}

但我的 reg ex 知识到此为止。

文本文件:https://jsfiddle.net/adsj0rw9/1/

【问题讨论】:

  • 我建议你做一个现场演示,因为我们看不到输入字符串。
  • 试试$file = preg_replace('~^ {3}$\R*~m', '', $file)
  • 如果您指的是任何水平空白,请尝试preg_replace('~^\h{3}$\R*~um', '', $file),如果可能超过 3 个,请将 {3} 更改为 {3,}。
  • 我还建议将 '.*$[\r\n]/m' 替换为 '.*$\R?/m'
  • 所以你不应该使用逗号, 量化:{3} 并添加$ 断言行尾:(?m)^[ ]{3}$(这将删除空格但不删除行)将行删除为好吧,你应该这样做:(?m)^[ ]{3}$\R?。这是一个现场演示regex101.com/r/BSQMKj/1

标签: php regex


【解决方案1】:

正则表达式中的 {Min,} 表示匹配 至少 Min 次。要精确匹配三个空格字符,您必须删除括号符号量词中的逗号,:^[ ]{3}。然后你应该寻找任何以下换行符将其取下:

(?m)^   $\R?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-28
    • 2020-12-03
    • 2017-03-22
    • 2015-06-01
    • 1970-01-01
    • 2019-07-12
    • 2016-02-26
    • 1970-01-01
    相关资源
    最近更新 更多