最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2012年09月13日 15:21:18   作者:  
剛才在寫一個代碼工具,遇到SQL換行和多余空格的問題,導(dǎo)致處理很困難,于是寫了一個正則式,搞定了,特分享下方便需要的朋友
復(fù)制代碼 代碼如下:

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);
}

輸出結(jié)果:
復(fù)制代碼 代碼如下:

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
結(jié)果可以看出,有一個是沒有去掉多余空格的。

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

原版API文檔中寫道:

Greedy 數(shù)量詞

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

Reluctant 數(shù)量詞

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

Possessive 數(shù)量詞

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


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

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

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

下面是一個我工具中的方法:
[code]
/**
* 判斷一條SQL語句是否已經(jīng)是分頁的SQL
*
* @param sql 源SQL
* @return 是已經(jīng)分頁的SQL時返回ture,否則返回False;
*/
public boolean isAlreadySegmentSQL(String sql) {
return sql.replace('\r', ' ').replace('\n', ' ').replaceAll(" {2,}", " ").matches("(?i).+LIMIT [\\d+ *|\\d *, *\\d+].+");
}

還是正則功能強悍啊!

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

// 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[]");

本文出自 “熔 巖” 博客

相關(guān)文章

  • 日常收集整理php正則表達式(超常用)

    日常收集整理php正則表達式(超常用)

    正則表達式用于字符串處理、表單驗證等場合,實用效率非常高,本文給大家收集整理了些php常用正則表達式,對php常用正則表達式感興趣的朋友可以參考下本篇文章
    2015-10-10
  • PHP匹配多行的正則表達式分析

    PHP匹配多行的正則表達式分析

    PHP匹配多行的正則表達式分析,需要的朋友可以參考下,多用于采集替換等。
    2011-07-07
  • 前端常用正則表達式匯總

    前端常用正則表達式匯總

    對于正則表達式,我們或許會經(jīng)常使用,但是又很難記住。這篇文章,我將介紹下簡單的正則表達式知識,然后總結(jié)前端開發(fā)中常用的正則表達式大全,需要的的朋友參考下
    2017-07-07
  • 淺談?wù)齽t表達式(Regular Expression)

    淺談?wù)齽t表達式(Regular Expression)

    本文介紹了正則表達式的一些學(xué)習(xí)內(nèi)容,以及在Javascript、PHP下如何使用正則表達式
    2014-08-08
  • 詳解正則表達式及Linux三大文本處理工具

    詳解正則表達式及Linux三大文本處理工具

    grep、sed和awk都是文本處理工具。這篇文章主要介紹了正則表達式及Linux三大文本處理工具,需要的朋友可以參考下
    2017-07-07
  • PHP中基于perl的正則表達式處理函數(shù)

    PHP中基于perl的正則表達式處理函數(shù)

    和正則表達式一樣,正則表達式處理函數(shù)不能夠獨立使用,而這必須相結(jié)合,才能夠完成特定的功能。我們只介紹以preg開頭的基于perl的正則表達式。
    2015-10-10
  • asp匹配網(wǎng)址的正則

    asp匹配網(wǎng)址的正則

    這篇文章主要介紹了asp匹配網(wǎng)址的正則,需要的朋友可以參考下
    2007-09-09
  • 去掉字符串前后所有空格的正則表達式

    去掉字符串前后所有空格的正則表達式

    正則表達式,又稱正規(guī)表示法、常規(guī)表示法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學(xué)的一個概念,接下來通過本文給大家介紹去掉字符串前后所有空格的正則表達式,需要的朋友參考下吧
    2016-03-03
  • javascript正則表達式處理中文和中文標(biāo)點符號的過程

    javascript正則表達式處理中文和中文標(biāo)點符號的過程

    在寫項目時遇到需要匹配字符串中所有的漢字并且包括簡單的中文標(biāo)點符號,下面這篇文章主要給大家介紹了關(guān)于javascript正則表達式處理中文和中文標(biāo)點符號的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • ASP正則函數(shù)替換分頁后的參數(shù)

    ASP正則函數(shù)替換分頁后的參數(shù)

    在分頁系統(tǒng)里面用到的把page后面得東西都給丟掉
    2008-07-07

最新評論

安顺市| 屯昌县| 青冈县| 日照市| 香格里拉县| 玉环县| 建德市| 镇坪县| 凉城县| 高要市| 临漳县| 抚远县| 甘谷县| 德惠市| 宝丰县| 筠连县| 沙湾县| 满城县| 石景山区| 石渠县| 革吉县| 体育| 尖扎县| 沛县| 杨浦区| 庆安县| 达日县| 东明县| 漳平市| 神池县| 栾城县| 沙田区| 丰顺县| 搜索| 津市市| 富锦市| 广水市| 莱西市| 塔城市| 开封市| 齐河县|