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

首頁 > 編程 > Regex > 正文

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

2020-03-22 18:14:42
字體:
來源:轉載
供稿:網友
復制代碼 代碼如下:
html' target='_blank'>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[]");

本文出自 “熔 巖” 博客
PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 午夜视频在线看 | 久久伊人精品热在75 | 国产日韩大片 | 一区二区三区四区视频在线观看 | 国产精品99久久久久久宅女 | 精品国产一区二区三区四区阿崩 | 9191久久久久视频 | 99在线在线视频免费视频观看 | 7777奇米成人四色影视 | 亚洲欧美国产高清 | 中文字幕在线免费播放 | 午夜视频久久久 | 亚洲经典视频 | 国产1区视频 | 男女一边摸一边做羞羞视频免费 | 国产成人羞羞视频在线 | 制服丝袜日日夜夜 | 国产精品视频导航 | 亚洲午夜天堂吃瓜在线 | 国产69精品久久久久9999不卡免费 | 日本中文字幕网址 | 久久久无码精品亚洲日韩按摩 | 欧美视频一二三区 | 成人做爰高潮片免费视频韩国 | 免费观看一级 | 中文字幕伦乱 | 黄色的视频免费观看 | 国产精品久久久久久久亚洲按摩 | 成年人在线视频免费 | 久久久久二区 | 99精美视频 | 亚洲视频精品在线 | 久久99精品久久 | 一级免费 | 激情福利视频 | 狠狠操人人干 | www.狠狠操.com | 欧美精品一区二区视频 | 一本色道久久综合亚洲精品图片 | 国产一区精品在线观看 | 史上最强炼体老祖动漫在线观看 |