如何使用正则表达式捕获重复信息

How to capture repeating information with regex

提问人:Maxime DANJOU 提问时间:8/8/2023 最后编辑:InSyncMaxime DANJOU 更新时间:8/8/2023 访问量:35

问:

我尝试捕获字符串中的所有信息,但只捕获最后一个信息。 我从正则表达式开始,我需要一些帮助。

字符串:

correspondent à l'ASIN B00WU8XXXX, mais les attributs suivants sont en conflit avec : product_type (Vendeur : 'APPLIANCE_ACCESSORY' / Amazon : 'CLEANING_AGENT'), ean (Vendeur : '400650819XXXX' / Amazon : '400650819XXXX'), item_package_quantity (Vendeur : '5' / Amazon : '10'

我的正则表达式:

.* (.*?) \(Vendeur : \'(.*?)\' \/ Amazon : \'(.*?)\'

我只捕获最后一个块

item_package_quantity : 5 : 10

我想捕捉的:

product_type : APPLIANCE_ACCESSORY : CLEANING_AGENT  
ean : 400650819XXXX: 400650819XXXX  
item_package_quantity : 5 : 10

一定没什么,但我转过身来:(

正则表达式 preg-match

评论


答:

1赞 The fourth bird 8/8/2023 #1

您可以使用 1 个或多个单词字符的组 1 匹配来启动模式,并对单引号内的值使用否定字符类。(\w+)[^']*

根据分隔符,您必须转义\/

(\w+) \(Vendeur : '([^']*)' \/ Amazon : '([^']*)'

正则表达式演示 |PHP 演示

$pattern = '/(\w+) \(Vendeur : \'([^\']*)\' \/ Amazon : \'([^\']*)\'/m';
$s = 'correspondent à l\'ASIN B00WU8XXXX, mais les attributs suivants sont en conflit avec : product_type (Vendeur : \'APPLIANCE_ACCESSORY\' / Amazon : \'CLEANING_AGENT\'), ean (Vendeur : \'400650819XXXX\' / Amazon : \'400650819XXXX\'), item_package_quantity (Vendeur : \'5\' / Amazon : \'10\'';

if(preg_match_all($pattern, $s, $matches, PREG_SET_ORDER)) {
    print_r(array_map(fn($m) => implode(" : ", array_slice($m, 1)), $matches));
}

输出

Array
(
    [0] => product_type : APPLIANCE_ACCESSORY : CLEANING_AGENT
    [1] => ean : 400650819XXXX : 400650819XXXX
    [2] => item_package_quantity : 5 : 10
)

评论

0赞 Maxime DANJOU 8/8/2023
谢谢,它如我所愿!