[24/Feb/2011:11:15:04 +0800]`xming`id=922`mobile=0`channel=3`type=2`charge_id=1226`payment=1065`business=8`linkid=S_1298517285_1725223675`return_url=`notice_status=00002
一个这样的字符串
要匹配这样的字符串
这个是一行 是log里面的一条记录
其实就是数据库的一条记录现在要匹配这样的记录
同时要能提取id ,charge_id,payment,notice_status
csdn没正则区
咱就找js了
找cj大哥 O(∩_∩)O~

解决方案 »

  1.   

    /[.|\s]*(id=\d{1,n})[.|\s]*(charge_id=\d{1,n})`(payment=\d{1,n})[.|\s]*notice_status=\d{5}$/我这样写的但是不对啊!
      

  2.   

    也就是id ,charge_id,payment,notice_status是有的,但顺序不一定一样???那我建议你分别写正则式,如果顺序一样的话
    id=(\d+)\s+.*?charge_id=(\d+).*?payment=(\d+).*?notice_status=(\d{5})$1至$4
      

  3.   

    /`id=(\d+)`.*?charge_id=(\d+)`.*?payment=(\d+)`.*?notice_status=(\d+)/
      

  4.   

    LS的貌似把 \s+ 去掉才对
      

  5.   

    /id=(\d+).*?charge_id=(\d+).*?payment=(\d+).*?notice_status=(\d+)/
      

  6.   

    不是是这样的我们的程序有统一记录日志的地方,但是我只想提取其中一种的。呵呵这个正则似乎可用id ,charge_id,payment,notice_status顺序是一定的 O(∩_∩)O~必定是notice_status=(\d{5})结尾的
      

  7.   

    /\[.*\].*id=(\d+).*charge_id=(\d+).*payment=(\d+).*notice_status=(\d+)$/
      

  8.   

    才看到
    神马语言?
    JS还是PHP
      

  9.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Untitled Document</title>
    <script type="text/javascript">
    var str = '[24/Feb/2011:11:15:04 +0800]`xming`id=922`mobile=0`channel=3`type=2`charge_id=1226`payment=1065`business=8`linkid=S_1298517285_1725223675`return_url=`notice_status=00002';
    //id ,charge_id,payment,notice_status
    var reg = /id=([^`]+).+?charge_id=([^`]+).+?payment=([^`]+).+?notice_status=([^`]+)/i;
    var tmp = str.match(reg);
    alert('id=' + RegExp.$1 + ',charge_id=' + RegExp.$2+ ',payment=' + RegExp.$3+ ',notice_status='+RegExp.$4);
    </script>
    </head>
    <body>
    </body>
    </html>
    js版的。似乎没什么可说的
      

  10.   

    语法早忘光了
    不知道你的grep熟悉不,如果熟悉的话试试看
    如果不行再商量同时
    1、php支持命名分组,你可以加进去
    2、php支持占有优先,所以你可以考虑在适当的地方用++来代替+以提高速度
      

  11.   


    我不知道你说的是啥 o(╯□╰)o还有上面所有的都有个问题
    第一个匹配id匹配到了后面的charge_id
    囧怎么办?
      

  12.   

    额。你的`是实际存在的么
    我没有php的测试引擎 发个工具给我?
      

  13.   


    php的环境安装很麻烦的
      

  14.   

    有个很好的解决办法,带着你的数据和楼上随便挑个正则表达式,然后到php版块要完整代码即可。
      

  15.   


    已经搞定$str="[24/Feb/2011:11:15:04 +0800]`xming`id=922`mobile=0`channel_id=3`channel_type=2`charge_id=1226`payment=1065`business_id=8`business_linkid=S_1298517285_1725223675`return_url=`notice_status=00002";
    $reg ='/\[.*\].*`id=(\d+).*charge_id=(\d+).*payment=(\d+).*notice_status=(\d+)$/';
    preg_match($reg,$str,$matches);
    echo $matches[0]."<br/>";
    echo $matches[1]."<br/>"; 
    echo $matches[2]."<br/>"; 
    echo $matches[3]."<br/>"; 
        echo $matches[4]."<br/>"; 我在正则的第一个id前面加了个“`”
      

  16.   

     不知道如果用
     preg_match_all是否能一次能把整个页面的对应标签全部都给匹配了!
      

  17.   

       楼主应该是用PHP里的file_get_contents读日志文件吧,然后把对应需要的标签提取,这样的话用PHP正则确实物有所值!
       既然很多条这种数据不如常识用preg_match_all一次读取出来,保存到数组里供使用,用fwrite逐行读取,再匹配也可以,但是感觉可能没有一次性读取来得爽!
      

  18.   

    preg_match_all
    怎么做啊??
    我用上面的正则 不行啊该怎么改?
      

  19.   

    我写的也成功了,哈哈 var test="[24/Feb/2011:11:15:04 +0800]`xming`id=922`mobile=0`channel=3`type=2`charge_id=1226`payment=1065`business=8`linkid=S_1298517285_1725223675`return_url=`notice_status=00002"
    alert(test.replace(/[^_]*(id=[\d]+)[\s|\S]*(charge_id=[\d]+)[\s|\S]*(payment=[\d+])[\s\S]*(notice_status=[\d+])/g,"$1 $2 $3 $4"));
      

  20.   

    如果是播火的话,你就进行播火就可以了。正则正则如下:
    /\S+\'id=(\d+)\'\S+charge=(\d+)\S+payment=(\d+)\Snotice_status=(\d+)\S/