php - 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
解决方案
在 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²"
}