PHP正则表达式:排除三类匹配内容提取剩余文本
解决方案:单正则移除指定内容并提取剩余文本
需求说明
- 移除1个以
title:开头、空格结束的字符串 - 移除1个以
body:开头、空格结束的字符串 - 移除多个以
#开头、空格结束的字符串 - 提取并整理剩余文本(去除多余空格)
实现代码
$inputStr = 'title:hello mexico body:something #css#php #html city'; // 移除三类指定内容 $tempStr = preg_replace('/\b(title:\S+|body:\S+|#\S+)\s?/u', '', $inputStr); // 清理首尾空格并合并中间连续空格 $result = preg_replace('/\s+/', ' ', trim($tempStr)); echo $result; // 输出:mexico city
正则表达式解释
/\b(title:\S+|body:\S+|#\S+)\s?/u
\b:单词边界,确保匹配完整的目标前缀,避免部分匹配title:\S+:匹配title:开头的完整前缀(直到空格为止的非空格内容)body:\S+:匹配body:开头的完整前缀(规则同上)#\S+:匹配所有#开头的内容(包括连续的#xxx#yyy这类无空格的情况)\s?:匹配目标内容后的可选空格,减少后续清理空格的工作量/u:启用Unicode支持,兼容多语言字符,与原正则的字符范围规则保持一致
内容的提问来源于stack exchange,提问作者Walid
相关产品推荐
相关产品推荐

