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

PCRE正则单捕获组匹配无分隔符字符串及PHP文本转换问题

用PHP处理面料成分字符串转列表项的解决方案

嘿,这个需求完全可以通过正则表达式轻松实现,不管成分名称是单词还是多词都能搞定!你提到的捕获组思路特别对,甚至可以用一个或者两个捕获组来完成,看你是否需要拆分百分比和成分名称。

方案一:单捕获组直接匹配完整成分项

这个方案最简单,直接匹配每个完整的“百分比+成分”单元,然后替换成<li>包裹的格式:

// 示例输入
$fabricStr = "90% Egyptian Cotton 10% Polyester";
// 正则匹配每个成分项
$regex = '/(\d+%[\s\w]+?)(?=\s+\d+%|$)/';
// 替换成<li>标签格式
$output = preg_replace($regex, '<li>$1</li>', $fabricStr);

// 输出结果:<li>90% Egyptian Cotton</li> <li>10% Polyester</li>
echo $output;

正则解释:

  • (\d+%[\s\w]+?):捕获组匹配一个完整的成分项,其中\d+%匹配百分比,[\s\w]+?用非贪婪模式匹配成分名称(包括空格和字母,支持多词)
  • (?=\s+\d+%|$):正向预查,确保当前匹配项的后面是“空格+新的百分比”或者字符串结尾,以此来精准分割每个成分。

方案二:双捕获组拆分百分比与成分名称

如果你需要单独处理百分比和成分名称(比如后续可能要分别样式化),可以用两个捕获组来拆分:

$fabricStr = "80% Polyester 10% Cotton 10% Rayon";
// 双捕获组正则
$regex = '/(\d+%)\s+([\w\s]+?)(?=\s+\d+%|$)/';
$output = preg_replace($regex, '<li>$1 $2</li>', $fabricStr);

// 输出结果:<li>80% Polyester</li> <li>10% Cotton</li> <li>10% Rayon</li>
echo $output;

正则解释:

  • (\d+%):第一个捕获组,单独匹配百分比部分(比如80%)
  • ([\w\s]+?):第二个捕获组,匹配成分名称(支持多词,比如Egyptian Cotton)
  • 同样用正向预查来确定每个成分项的边界,避免匹配出错。

这两个方案都能完美处理你提到的所有情况:100%单一成分、双成分、多词成分都不在话下!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:26:09