PHP函数只返回包含某些字符的字符串部分?

时间:2014-04-10 06:01:51

标签: php string

我有一个字符串如下:

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

我需要一个只返回前面带有" CATEGORY-ACTIVE - "的数字的函数。 (不带引号)换句话说它应该返回:8,4并将其他所有内容保留。

有没有可以执行此操作的php函数?

谢谢。

5 个答案:

答案 0 :(得分:3)

使用Preg_match_all并提取第一场比赛

$input_lines="CATEGORY-ACTIVE-8,CATEGORY-ACTIVE-4,ACTIVE-6,ACTIVE-9"
preg_match_all("/CATEGORY-ACTIVE-(\d+)/", $input_lines, $output_array);
print_r(join(',',$output_array[1]));

<强>输出

8,4

答案 1 :(得分:2)

  

有没有可以执行此操作的php函数?

您可以通过编写一些代码逻辑来使用PHP Native函数来实现它。但是使用正则表达式(保持简单和简短)。


使用PHP函数..

<?php
$str = 'CATEGORY-ACTIVE-8,CATEGORY-ACTIVE-4,ACTIVE-6,ACTIVE-9';
$str=explode(',',$str);
$temparr=array();
foreach($str as $v)
{
    if(strpos($v,'CATEGORY-ACTIVE-')!==false)
    {
        $temparr[]=str_replace('CATEGORY-ACTIVE-','',$v);
    }
}
echo implode(',',$temparr); //"prints" 8,4

使用正则表达式和implode它atlast(首选方式..)

<?php
$str = 'CATEGORY-ACTIVE-8,CATEGORY-ACTIVE-4,ACTIVE-6,ACTIVE-9';
preg_match_all('/CATEGORY-ACTIVE-(.*?),/', $str, $matches);
echo implode(',',$matches[1]); //8,4

enter image description here

答案 2 :(得分:1)

我使用外观断言来实现这一目标:

(?<=CATEGORY-ACTIVE-)(\d+)

<强>可视化:

Image from debuggex.com

<强>代码:

$str = 'CATEGORY-ACTIVE-8,CATEGORY-ACTIVE-4,ACTIVE-6,ACTIVE-9';
preg_match_all('/(?<=CATEGORY-ACTIVE-)(\d+)/', $str, $matches);
print_r($matches[1]);

<强>输出:

Array
(
    [0] => 8
    [1] => 4
)

Demo

答案 3 :(得分:0)

是的,请随意探索正则表达式的精彩世界!

http://il1.php.net/preg_match

我建议你自己做一些阅读,因为&#34;得到答案&#34;当谈到正则表达式是一种罪恶,你从中学不到任何东西。

我自己并不是经验丰富,但这是你必须学习的事情之一,而且理论在这里不会削减它。< / p>

答案 4 :(得分:0)

理论上它看起来像这样

$ str = 84838493849384938;

preg_match_all(/ [8.4] /,$ str);

您也可以在这个网站http://www.phpliveregex.com/

上玩REgex