PHP寻找一个从字符串中获取值的函数

3

我正在寻找一个PHP函数,可以从这个字符串中获取仅由“ACTIVE-”前缀的数字,但是不包括那些由“CATEGORY-ACTIVE-”前缀的数字。

 $product_req = "ACTIVE-6,CATEGORY-ACTIVE-8,CATEGORY-ACTIVE-4,ACTIVE-9";

我尝试使用preg_match_all,但它不起作用,因为它返回所有数字。我应该使用哪个函数代替?

谢谢。

2个回答

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]); 

输出:

6,9

enter image description here


1
再次感谢您的详细答复。 - Cain Nuke

1
这只是一个好的正则表达式的问题:

$re = '/(^|,)ACTIVE-(\d+)/'; 
$str = 'ACTIVE-6,CATEGORY-ACTIVE-8,CATEGORY-ACTIVE-4,ACTIVE-9'; 

preg_match($re, $str, $matches);

匹配69

正则表达式解释:

  1. 第一个括号匹配行字符串开头(^字符)或逗号。这样我们就可以摆脱CATEGORY-
  2. 第二个括号匹配您的数字,因为\d表示数字字符,+表示一个或多个。
  3. 结尾处的g表示全局匹配标志 - 不要在第一次匹配后停止。

您可以在此处了解有关PHP正则表达式语法的更多信息:http://www.regular-expressions.info/php.html

您可以通过此链接测试此正则表达式:http://regex101.com/r/yD6xJ0


谢谢,这个可以用,但我希望能够得到解释,因为我真的不太理解$re部分。为什么所有那些奇怪的符号都是必要的?它们代表什么意思? - Cain Nuke
@CainNuke添加了解释和一些有用的链接。 - Im0rtality

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接