首页 > 解决方案 > PHP Regex 提取除换行符和制表符之外的所有内容

问题描述

我知道这种问题经常被问到,但所有其他答案对我来说都不是真的有用。我有以下文本块:

"""
\n
\t\t\t\t\tÁrea útil\n
\t\t\t\t\t\n
\t\t\t\t\t\t\n
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t150 m²\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n
\t\t\t\t\t\n
\t\t\t\t
"""

而且我想忽略所有换行符和制表符(\n\t),并将其他所有内容提取到数组中。所以理想情况下,例如,上面的文本块将被转换为

[
    'Área útil',
    '150m²',
]

编辑:以下是我尝试过的一些示例:

(?!\n)(?!\t)[.]+
(?!\n)(?!\t)(.)+
(\r\n)+|\r+|\n+|\t+
^\w+$

EDIT2:对不起,完全忘了提到语言是 PHP

标签: phpregex

解决方案


在 PHP 中,您可以执行以下操作:

<?php
$string = "\n
\t\t\t\t\tÁrea útil\n
\t\t\t\t\t\n
\t\t\t\t\t\t\n
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t150 m²\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n
\t\t\t\t\t\n
\t\t\t\t";

// Get rid of the tabs
$string = preg_replace( '/(\t)/m', '', $string );

// Split on new lines
$array = preg_split( '/[\r\n]/m', $string );

// Loop the array and get rid of empty strings
foreach( $array as $k=>$v )
{
    if( $v === '' )
    {
        unset( $array[ $k ] );
    }
}

// Re-index the array
$array = array_values( $array );

var_dump( $array );

哪个输出:

array(2) {
  [0]=>
  string(11) "Área útil"
  [1]=>
  string(7) "150 m²"
}

推荐阅读