no2x

匹配字符串组合,求指点,我已经被绕晕了。

  •  
  •   no2x · Feb 3, 2013 · 3029 views
    This topic created in 4850 days ago, the information mentioned may be changed or developed.
    <?php
    $String = 'WTRSUE+ABSSUE++ABDA+ABGCSUE+CDIH+CDJNUSX+CDGBHCSUSX+ABFFA';
    $Pattern = '/(SUE(\+(AB|CD)))|(USX(\+AB))/';
    //$Pattern = '/((SUE|USX)(\+AB))|(SUE(\+CD))/'; //第 2 种写法
    //$Pattern = '/(SUE(\+AB))|(SUE(\+CD))|(USX(\+AB))/'; //第 3 种写法
    if ( Preg_match_all( $Pattern, $String, $result )) {
    echo ('<xmp>');
    print_r ( $result );
    echo ('</xmp>');
    }

    如 $String 所述,待处理的字符串里有 SUE+AB 和 SUE+CD 和 USX+AB 这 3 个组合字符串中的 +AB 和 +CD 是我需要匹配提取出来的。(为测试效果,我在待处理的字符串里加了几个错误的组合进去。正确的只有这 3 个。)

    (待处理字符串中的都是举例,AB 或 CD 的组合实际上还有十几种,我为了简单,用 AB 或 CD 这样的简单特征代表)

    然后我尝试写了这 3 个 Pattern 来匹配。结果,是一堆的小括号啊。我被绕晕了。

    每一个小括号就代表会被存储到一个数组变量里。而我后面还有十几种组合呢。那不 N 多个数组变量?

    /[SUE(\+[AB|CD])]|[USX(\+AB)]/ 如果 [ ] 里的字母不是集合,而是可以当字符串用,该多简单。

    我自学正则表达式的,我不知道是否有这类的写法?或者有更好的匹配?求解。

    (但愿我表达清楚了。)
    3 replies    1970-01-01 08:00:00 +08:00
    haiyang416
        1
    haiyang416  
       Feb 3, 2013   ❤️ 1
    请搜索非捕获组。
    alexrezit
        2
    alexrezit  
       Feb 3, 2013 via iPhone   ❤️ 1
    难道不是用 ?: 和 (|) 来处理?
    no2x
        3
    no2x  
    OP
       Feb 3, 2013
    @haiyang416 还真不知道呢。谢谢。@alexrezit
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1005 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 19:01 · PVG 03:01 · LAX 12:01 · JFK 15:01
    ♥ Do have faith in what you're doing.