PHP正则提取商品文本仅匹配第一条记录,如何调整正则表达式?
问题根因
你现有的正则里,Itemname分组的规则强制要求商品名必须包含1位数字(即规则里的[\d]{1}部分),但第二条记录的商品名#PRESTIGE SS DLX ALPHA没有数字,因此匹配失败。
修正后正则
(?'SrNo'\d+)\s+(?'Itemname'#([A-Z\d\s.*-]*))\s+(?'MRP'[0-9.]*)
调整说明
仅将数字\d加入商品名字符允许范围,同时删除强制必须出现1位数字的规则,改动最小,完全兼容你原有命名分组的使用逻辑,不需要修改后续提取代码。
匹配验证
两行样本都可以正常提取对应字段:
- 第一行匹配结果
- SrNo:
1 - Itemname:
#PRESTIGE COOKTOP 3B - MRP:
6995.00
- SrNo:
- 第二行匹配结果
- SrNo:
3 - Itemname:
#PRESTIGE SS DLX ALPHA - MRP:
2250.00
- SrNo:
内容的提问来源于stack exchange,提问作者aniket ashtekar
相关产品推荐
相关产品推荐

