麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Regex > 正文

通過Java正則表達式去掉SQL代碼中回車換行和多余空格

2020-03-16 21:09:43
字體:
來源:轉載
供稿:網友
剛才在寫一個代碼工具,遇到SQL換行和多余空格的問題,導致處理很困難,于是寫了一個正則式,搞定了,特分享下方便需要的朋友
 
 
復制代碼代碼如下:

public static void main(String[] args) { 
String sql = "SELECT * FROM /n" + 
" `testdb`.`foo` LIMIT 0, 100"; 
String s = "SELECT * FROM `testdb`.`foo` LIMIT 0, 100"; 
String sql2 = Pattern.compile(" {2,}").matcher(s).replaceAll(" "); 
String sql3 = s.replaceAll(" {2,}"," "); 
String sql4 = sql.replace('/r', ' ').replace('/n', ' ').replaceAll(" {2,}"," ");; 
String sql5 = sql.replace('/r', ' ').replace('/n', ' ').replaceAll(" {2,}?"," ");; 
String sql6 = sql.replace('/r', ' ').replace('/n', ' ').replaceAll(" {2,}+"," ");; 
System.out.println(sql2); 
System.out.println(sql3); 
System.out.println(sql4); 
System.out.println(sql5); 
System.out.println(sql6); 

輸出結果: 
復制代碼代碼如下:

SELECT * FROM `testdb`.`foo` LIMIT 0, 100 
SELECT * FROM `testdb`.`foo` LIMIT 0, 100 
SELECT * FROM `testdb`.`foo` LIMIT 0, 100 
SELECT * FROM `testdb`.`foo` LIMIT 0, 100 
SELECT * FROM `testdb`.`foo` LIMIT 0, 100 
[code] 
Process finished with exit code 0 
結果可以看出,有一個是沒有去掉多余空格的。 

可見java中的正則式,同樣含義的還有多重寫法,呵呵!其實主要是不同數量詞匹配模式在作怪: 

原版API文檔中寫道:

Greedy 數量詞 

X? X,一次或一次也沒有 
X* X,零次或多次 
X+ X,一次或多次 
X{n} X,恰好 n 次 
X{n,} X,至少 n 次 
X{n,m} X,至少 n 次,但是不超過 m 次 

Reluctant 數量詞 

X?? X,一次或一次也沒有 
X*? X,零次或多次 
X+? X,一次或多次 
X{n}? X,恰好 n 次 
X{n,}? X,至少 n 次 
X{n,m}? X,至少 n 次,但是不超過 m 次 

Possessive 數量詞 

X?+ X,一次或一次也沒有 
X*+ X,零次或多次 
X++ X,一次或多次 
X{n}+ X,恰好 n 次 
X{n,}+ X,至少 n 次 
X{n,m}+ X,至少 n 次,但是不超過 m 次 


但是,沒有對三種方式進行更詳細的說明,其實三種模式的區別如下: 

Greedy :嘗試找到最長的匹配。 
Reluctant :嘗試找到最短的匹配。 
Possessive :也嘗試找到最長的匹配。 

盡管greedy和possessive迫使一個matcher在進行第一次匹配之前讀取整個的text,greedy常常導致為了找到一個match進行多次嘗試,然而possessive讓一個matcher僅嘗試一個match一次。 

下面是一個我工具中的方法: 
[code] 
/** 
* 判斷一條SQL語句是否已經是分頁的SQL 

* @param sql 源SQL 
* @return 是已經分頁的SQL時返回ture,否則返回False; 
*/ 
public boolean isAlreadySegmentSQL(String sql) { 
return sql.replace('/r', ' ').replace('/n', ' ').replaceAll(" {2,}", " ").matches("(?i).+LIMIT [//d+ *|//d *, *//d+].+"); 

還是正則功能強悍??! 

補充: 
下面這個兩個注視的正則式,和第三個語意一樣的: 
復制代碼代碼如下:

// regList.put("(?i)bit//([2-9]//)//z", "byte[]"); 
// regList.put("(?i)bit//(//d{2,}//)//z", "byte[]"); 
regList.put("(?i)bit//((//d{2,}|[2-9])//)//z", "byte[]"); 

本文出自 “熔 巖” 博客

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 毛片大全免费 | 欧美日韩高清一区 | 成年人视频免费看 | 成人一区二区三区在线 | 青青青在线免费 | 国产在线精品91 | www.精品久久 | 色av成人天堂桃色av | 免费在线观看亚洲 | 免费观看视频网站 | 中文字幕免费播放 | 黄色av一区二区三区 | 精品一区二区在线观看 | 双性精h调教灌尿打屁股的文案 | 激情综合婷婷久久 | 欧美日韩在线播放一区 | 毛片在哪看 | 欧美wwwsss9999 | 日日摸夜夜添夜夜添牛牛 | 草人人| 国产精品久久久久久久久久三级 | 精品国产一区二区三区久久久蜜月 | 最近国产中文字幕 | 999精品久久久 | 男女无套免费视频 | 最近国产中文字幕 | 国产高清美女一级毛片久久 | 成年性羞羞视频免费观看 | 久久17| 香蕉视频1024 | 九一传媒在线观看 | 福利在线免费 | 亚洲码无人客一区二区三区 | 国产精品视频一区二区三区四 | 色妹子久久 | 九九热精品在线 | 久草在线看片 | 我爱我色成人网 | 国产91对白叫床清晰播放 | 看免费黄色大片 | 欧美扩阴视频 |