/*
需求就是
dj一个分组
%a3%a3 或者%23 是另外一个分组
999是一个分组通过$result获取对应的数据。
如:
*/
$result[0]='dj';
$result[1]='%a3%a3';
$result[2]='999';

解决方案 »

  1.   

    $s = 'dj%a3%a3999';
    preg_match('/([^%]+)((?:%a3|23)+)(.+)/', $s, $r);
    print_r($r);
    Array ( [0] => dj%a3%a3999 [1] => dj [2] => %a3%a3 [3] => 999 ) 
      

  2.   

    使用了这个:
    $string='dj%a3%a3999';
    if(preg_match('/^([dj]{2})([%a3]+)(\d{3})$/i', $string,$result)){
     print_r($result);
    }结果:
    Array ( [0] => dj%a3%a3999 [1] => dj [2] => %a3%a3 [3] => 999 )
      

  3.   


    如果$s = 'dj%23999';则不行。
      

  4.   

    这个串也需要匹配的:$string='dj%23999';
      

  5.   

    $s = 'dj%23999';
    preg_match('/([^%]+)((?:%(?:a3|23))+)(.+)/', $s, $r);

    preg_match('/([^%]+)((?:%a3|%23)+)(.+)/', $s, $r);正则表达式规则说明中有:
    | 运算时如果发生歧义,则需要逐个开列或用括号括起来显然 (?:%a3|23) 中 % 被结合到了 a3 从而发生了歧义
      

  6.   


    老大,能不能帮我匹配个地址,如:www.sohu.com,www.baidu.com,www.yahoo.com.n这样连着的网址最多为9个,其中也可以匹配sohu.com,baidu.com,yahoo.com.cn