string=qw_0_0-1额
preg_match("/\/(\w+)_(\d+)_(\d+)-([\w]+)\>/si",$str);怎么我上面那个中文取不到值啊。只要出现中文就取值不到。。
和解?

解决方案 »

  1.   

    [\w]+不能匹配中文中文的匹配:
    GBK编码的话是[\x80-\xff]
    utf-8的编码:[\x{4e00}-\x{9fa5}]或者你用.匹配所有字符,也可以匹配出中文。
      

  2.   

    还是获取不到哦、、string=qw_0_0-1额
    preg_match("/\/(\w+)_(\d+)_(\d+)-([\x80-\xff]+)\>/si",$str)是这样写吗?
      

  3.   

    jordan说的对。你可以简单用\w匹配前面的数字字母下划线。如果要单独匹配出中文。也可以:<?php
    $string = 'qw_0_0-1额你好';
    preg_match_all("/(\w+-\d+(.*))/is",$string,$arr);
    print_r($arr[1]);//匹配串
    print_r($arr[2]);//中文放在这里
      

  4.   

    我不会写正则。。
    $str=qw_0_0-1额;
    preg_match("/\/(\w+)_(\d+)_(\d+)-([\w]+)\>/si",$str);我只是想把上面那个 “1额”给取出来。↑要怎么改
      

  5.   

    (preg_match("/\/(\w+)_(\d+)_(\d+)-(\w+-.+/)\>/si",$path_info,$arr_path))
      

  6.   

    $str="qw_0_0-1额>";
    (preg_match("/\/(\w+)_(\d+)_(\d+)-(\w+-.+/)\>/si",$str,$arr_path))
    我要分别取出
    qw
    0
    0
    1额这四个,去掉后面那个“>”
      

  7.   

    <?php
    $string = 'qw_0_0-1额';
    preg_match_all("/\w+-(\d+(.*))/is",$string,$arr);
    print_r($arr[1]);//1额
      

  8.   


    用你的写法:
    <?php
    $str = "qw_0_0-1额>";
    $patten = '/(\w+)_(\w+)_(\w+)-(\d+[^<>]*)/is'; 
    preg_match_all($patten,$str,$arr);
    print_r($arr);
      

  9.   

    $str='qw_0_0-1额>';
    #1
    print_r(sscanf($str,'%[^_]_%d_%d-%[^>]>'));
    echo "<br/>";
    #2
    preg_match('#([^_]+)_(\d+)_(\d+)-([^>]+)>#',$str,$m);
    print_r($m);
      

  10.   


    $s ='qw_0_0-1额>';
    $arr=split('[_-]',$s);
    print_r($arr);  
      

  11.   


    这个没有去掉>
    应该加个>分割<?php
    $s ='qw_0_0-1额>';
    $arr=split('[>_-]',$s);
    print_r($arr); 
      

  12.   


    <?php
    $str = "qw_0_0-1额>";
    $patten = '/(\w+)_(\w+)_(\w+)-(\d+[^<>]*)/is'; 
    preg_match_all($patten,$str,$arr);
    print_r($arr);
    这个可以哦。。
    如果我要过滤SQL语句做防注入呢?
      

  13.   


    sql的话,应该检查用户的输入是否有select,drop,delete,alter...等关键字。