我正在寻找一个PHP函数,可以从这个字符串中获取仅由“ACTIVE-”前缀的数字,但是不包括那些由“CATEGORY-ACTIVE-”前缀的数字。
$product_req = "ACTIVE-6,CATEGORY-ACTIVE-8,CATEGORY-ACTIVE-4,ACTIVE-9";
我尝试使用preg_match_all
,但它不起作用,因为它返回所有数字。我应该使用哪个函数代替?
谢谢。
使用负向回顾后发现?<!-
来匹配连字符,如果在单词ACTIVE
之前找到连字符,则不会进行匹配。
<?php
$str = 'ACTIVE-6,CATEGORY-ACTIVE-8,CATEGORY-ACTIVE-4,ACTIVE-9';
preg_match_all('/(?<!-ACTIVE-)(\d+)/', $str, $matches);
echo implode(',',$matches[1]);
输出:
6,9
$re = '/(^|,)ACTIVE-(\d+)/';
$str = 'ACTIVE-6,CATEGORY-ACTIVE-8,CATEGORY-ACTIVE-4,ACTIVE-9';
preg_match($re, $str, $matches);
匹配6和9
正则表达式解释:
^
字符)或逗号。这样我们就可以摆脱CATEGORY-
。\d
表示数字字符,+
表示一个或多个。g
表示全局匹配标志 - 不要在第一次匹配后停止。您可以在此处了解有关PHP正则表达式语法的更多信息:http://www.regular-expressions.info/php.html
您可以通过此链接测试此正则表达式:http://regex101.com/r/yD6xJ0