我正在寻找PHP中的一个函数,它只能从这个字符串中得到前面带有“ ACTIVE - ”的数字但是忽略前面带有“ CATEGORY-ACTIVE- < /强>“
$product_req = "ACTIVE-6,CATEGORY-ACTIVE-8,CATEGORY-ACTIVE-4,ACTIVE-9";
我尝试使用preg_match_all
,但它无法正常工作,因为它会返回所有数字。我应该使用什么功能?
谢谢。
答案 0 :(得分:2)
对连字符使用否定后视?<!-
,如果在单词ACTIVE
之前找到连字符,那么它就不会匹配。
<?php
$str = 'ACTIVE-6,CATEGORY-ACTIVE-8,CATEGORY-ACTIVE-4,ACTIVE-9';
preg_match_all('/(?<!-ACTIVE-)(\d+)/', $str, $matches);
echo implode(',',$matches[1]);
<强> OUTPUT :
强>
6,9
答案 1 :(得分:1)
这只是一个很好的正则表达式问题:
$re = '/(^|,)ACTIVE-(\d+)/';
$str = 'ACTIVE-6,CATEGORY-ACTIVE-8,CATEGORY-ACTIVE-4,ACTIVE-9';
preg_match($re, $str, $matches);
匹配 6 和 9
正则表达式解释:
^
char)或逗号。这样我们就可以摆脱CATEGORY-
。\d
代表数字字符,+
代表一个或多个。g
结尾意味着global
旗帜 - 在首场比赛后不要停止。您可以在此处阅读有关PHP正则表达式语法的更多信息:http://www.regular-expressions.info/php.html
您可以在此处使用此正则表达式:http://regex101.com/r/yD6xJ0