You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP正则表达式提取除换行(\n)和制表符(\t)外的内容到数组

解决PHP中提取含大量换行/制表符文本的有效内容问题

嘿,我明白你要处理的这个文本提取需求了——那些多余的换行和制表符确实烦人,而且之前的正则没搞定对吧?别担心,我给你两个靠谱的PHP解决方案,都能得到你想要的['Área útil', '150m²']数组结果。

方法一:通用文本清理+分割法

这个方法适合类似格式的任意文本,不依赖固定内容:

// 你的原始文本
$rawText = " \n \t\t\t\t\tÁrea útil\n \t\t\t\t\n \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\t150 m²\t\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\n \t\t\t\t ";

// 第一步:彻底移除所有换行(\n)和制表符(\t)
$cleanedText = preg_replace('/[\n\t]/', '', $rawText);

// 第二步:去掉首尾空格,再用2个及以上的空格作为分隔符拆分内容
$parts = preg_split('/\s{2,}/', trim($cleanedText));

// 第三步:单独处理第二个元素,去掉数字和单位之间的空格
$parts[1] = str_replace(' ', '', $parts[1]);

// 输出结果
print_r($parts);
// 最终输出:Array ( [0] => Área útil [1] => 150m² )

为什么这个方法有效?

  • 先把所有干扰的换行和制表符清掉,剩下的只有空格和有效内容
  • 用多个空格作为分割依据,因为原始文本里两个有效内容之间是大量空格分隔的
  • 最后单独处理第二个元素的空格,保留第一个元素里的正常空格(比如Área útil里的空格是需要的)

方法二:精准正则匹配法

如果你的文本格式是固定的(比如永远是Área útil和150 m²这类结构),可以用更直接的正则匹配:

$rawText = " \n \t\t\t\t\tÁrea útil\n \t\t\t\t\n \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\t150 m²\t\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\n \t\t\t\t ";

// 直接匹配两个目标内容,/s修饰符让.能匹配换行符
preg_match('/(Área útil).*?(150\s*m²)/s', $rawText, $matches);

// 整理成目标数组,处理第二个元素的空格
$result = [
    $matches[1],
    str_replace(' ', '', $matches[2])
];

print_r($result);
// 输出同样符合要求

为什么你之前的正则没生效?

你之前尝试的(?!\n)(?!\t)[.]+这类正则逻辑有问题:负前瞻的用法不对,而且没有考虑到有效内容被大量空白分隔的情况,导致无法正确捕获到两个独立的有效文本块。

内容的提问来源于stack exchange,提问作者Adam Silva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:01:01