用php正则挑选出     数字从小到大  和 字母从a - z  顺序的 ...例如:0189      agh 

解决方案 »

  1.   

    从哪挑选,字符串里还是URL地址或者某个文本文件里??
      

  2.   

    就比如一个 长的字符串和文章   挑选出 123 654 987 abd zyx 456能把123 abd 456 挑选出来 
      

  3.   

    如果非要用一条正则就穷举吧/01|02|03|04|05|……|0123456789|ab|ac|ad……/哇咔咔……我想没人这样做吧?呃,貌似穷举也不行,正则有匹配数量限制?
      

  4.   


    这有什么特别规律不??
    我实现在看不出。结果可否 123 6 9 abd z 
      

  5.   

    这不是只用正则就可解决的
    $s = '123 654 987 abd zyx 456';
    //能把123 abd 456 挑选出来$p = array(
     '/(\w)(\w)/e',
     '/\W+\w\W+/',
    );$r = array(
     '"$1"<"$2"?"$1$2":" $2"',
     ' ',
    );while($s != ($t = preg_replace($p, $r, $s))) $s = $t;
    echo $s;123 abd 456
      

  6.   


     '/(\w)(\w)/e',
     '/\W+\w\W+/',   这是具体是什么意思  能不能给我详细解释一下啊?/\W+\w\W+/ 什么也匹配不到啊? 还有那个"$1"<"$2"?"$1$2":" $2"   " $2"  是有什么作用?
      

  7.   

    要连起来看
    '/(\w)(\w)/e', '"$1"<"$2"?"$1$2":" $2"'
    规则:连续的两个字母数字
    替换:第一个小于第二个,一并返回,否则删去第一个
    因为替换是表达式,所以要附加e扩展
    '/\W+\w\W+/', ' '
    规则:被若干非字母数字包围的单个字母数字
    替换:单个空格使用循环
    while($s != ($t = preg_replace($p, $r, $s))) $s = $t;
    的原因是:在大多情况下需要多次替换才能完成
    循环终止的条件是 $s 不再被替换(原串与替换后的串相同)
      

  8.   

    微瑕疵:'/\W+\w\W+/',是不能替换开头或结尾单个字符的投机的办法:while($s != ($t = preg_replace($p, $r, $s))) $s = ' ' . $t . ' ';或修改上面的正则
      

  9.   


    大部分都了解了,但是还有一个疑问:(\w)(\w) 和 "$1"<"$2"?"$1$2":" $2" 就先匹配第一次 123  第二次把
    654 中的 54取出来 然后就 87 abd yx 456,然后利用while 进行替换, 但是 /\W+\w\W+/ 在字符串里面没有匹配的字符 就不能替换成空格,我就是不知道/\W+\w\W+/ 是怎么起作用的 ... 但不放这个结果还不对 
      

  10.   

    怎么会没有呢?
    为了便于理解,你可以在循环中输出一下 $s
    $s = '123 654 987 abd zyx 456';
    //能把123 abd 456 挑选出来$p = array(
     '/(\w)(\w)/e',
     '/\W+\w\W+/',
    );$r = array(
     '"$1"<"$2"?"$1$2":" $2"',
     ' ',
    );while($s != ($t = preg_replace($p, $r, $s))) {
      $s = $t;
      echo "$s </br>";
    }
    echo $s;得到
    123 54 87 abd yx 456 
    123 7 abd 456 
    123 abd 456 
    123 abd 456