【问题标题】:PHP Looking for a function that gets values from a stringPHP寻找一个从字符串中获取值的函数
【发布时间】:2014-05-25 02:22:02
【问题描述】:

我正在寻找 PHP 中的一个函数,它只能从该字符串中获取以“ACTIVE-”开头的数字,但忽略以“CATEGORY-ACTIVE-"

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

我尝试使用preg_match_all,但它不起作用,因为它会返回所有数字。我应该改用什么函数?

谢谢。

【问题讨论】:

    标签: php arrays regex function output


    【解决方案1】:

    对连字符使用否定的后视?<!-,如果在单词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
    

    【讨论】:

    • 再次感谢您的详细解答。
    【解决方案2】:

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

    $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 at end 表示 global 标志 - 在第一场比赛后不要停止。

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

    你可以在这里玩这个正则表达式:http://regex101.com/r/yD6xJ0

    【讨论】:

    • 谢谢,但我会很感激解释,因为我真的不太了解 $re 部分。为什么所有这些奇怪的符号都是必要的?它们是什么意思?
    • @CainNuke 添加了解释和一些有用的链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2016-07-27
    • 2013-11-25
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多