1 如果X参数值为纯数字
(?:^|\?|&)X=(\d*)(?:&|$)
?:的作用:只匹配不捕获结果,即不返回值,不占空间,是这意思不?
^即开头字符,代表X=之前没别的字符
|是或者的意思
\?即?字符本身
&即&字符本身
X=前面的这些正则的意思即是X=前面没有任何字符或者有一个?或者&
即URL前半部分格式为 X=或者http://aaaaa?X=或者http://aaaaa?M=&X=
(\d*)即为数字任意次,也就是X这个参数的值是纯数字的时候能这么写
最后就是结果X=后边跟着&开头的其他参数,或者就是url的结尾了
2 如果X参数值不是纯数字
(.*)?X=([^&]*)
问号的意思是非贪婪匹配,即遇到X=就不在匹配任意字符了
后半部分因为参数后面还会带其它参数所以可能会有&跟着,也可能是最后一个参数,取X值时不能把后面的值取了
3 使用建表语句,在创建表结束后发现字段分隔的又有问题,把时间中的+0800切成一个字段了,最后一个字段就被排挤出去了
找了很久,终于找到原因,'quote.delim'='("|\\[|\\])'不能写成'quote.delim'='("|\[|\])'
否则原本解析成这样的
223.198.228.244 NULL NULL 24/Feb/2013:22:00:54 +0800 POST /account/page.do HTTP/1.1 200 52 http://×××/index.html Mozilla/5.0
223.198.228.244 NULL NULL 24/Feb/2013:22:00:56 +0800 GET /logout.do HTTP/1.1 302 NULL http://×××/common/timeout.html Mozilla/5.0
会变成这样
223.198.228.244 NULL NULL [24/Feb/2013:22:00:54 +0800] NULL 200 52 http://×××/index.html
223.198.228.244 NULL NULL [24/Feb/2013:22:00:56 +0800] NULL 302 NULL http://×××/common/timeout.html
造成此问题本质原因在于: