Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正在寻找从字符串中获取值的函数_Php_Arrays_Regex_Function_Output - Fatal编程技术网

PHP正在寻找从字符串中获取值的函数

PHP正在寻找从字符串中获取值的函数,php,arrays,regex,function,output,Php,Arrays,Regex,Function,Output,我正在寻找一个PHP函数,它只能从这个字符串中获取前面带有“ACTIVE-”的数字,但不包含前面带有“CATEGORY-ACTIVE-”的数字 我尝试了preg\u match\u all,但它不起作用,因为它会返回所有的数字。我应该使用什么函数来代替 谢谢。用消极的眼光看后面的?对于连字符,如果在单词ACTIVE之前找到连字符,则它将不匹配 <?php $str = 'ACTIVE-6,CATEGORY-ACTIVE-8,CATEGORY-ACTIVE-4,ACTIVE-9'; preg

我正在寻找一个PHP函数,它只能从这个字符串中获取前面带有“ACTIVE-”的数字,但不包含前面带有“CATEGORY-ACTIVE-”的数字

我尝试了
preg\u match\u 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]); 

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

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

preg_match($re, $str, $matches);
匹配69

正则表达式解释:

  • 第一个括号与行字符串开头(字符)或逗号匹配。这样我们就摆脱了
    类别-
  • 第二个括号与数字匹配,因为
    \d
    代表数字字符,
    +
    代表一个或多个字符
  • g
    结尾表示
    global
    标志-第一次匹配后不要停止
  • 您可以在此处阅读有关PHP正则表达式语法的更多信息:


    你可以在这里玩这个正则表达式:

    谢谢,这很管用,但我希望你能给我一个解释,因为我真的不太理解$re部分。为什么所有这些奇怪的符号都是必要的?“它们是什么意思?”CainNuke补充了解释和一些有用的链接,再次感谢您的详细回答。
    6,9
    
    $re = '/(^|,)ACTIVE-(\d+)/'; 
    $str = 'ACTIVE-6,CATEGORY-ACTIVE-8,CATEGORY-ACTIVE-4,ACTIVE-9'; 
    
    preg_match($re, $str, $matches);