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

Java編程中正則表達(dá)式的用法總結(jié)

 更新時(shí)間:2016年05月11日 17:27:18   作者:超低空  
這篇文章主要介紹了Java編程中正則表達(dá)式的用法總結(jié),正則表達(dá)式是一種強(qiáng)大的字符串處理工具,Java對正則表達(dá)式的支持還是很不錯(cuò)的,我們先來整理一下正則表達(dá)式的一些基礎(chǔ)知識:

1. 字符串中的正則表達(dá)式
使用正則表達(dá)式可以對字符串進(jìn)行查找、提取、分割、替換等操作。String類當(dāng)中提供了如下幾個(gè)特殊方法:

boolean matches(String regex):判斷該字符串是否匹配指定的正則表達(dá)式。
String replaceAll(String regex, String replacement):將該字符串中所有匹配regex的子串替換成replacement。
String[] split(String regex):以regex作為分隔符,把該字符串分割成多個(gè)子串。
以上這些特殊的方法都依賴于Java提供的正則表達(dá)式。

2. 創(chuàng)建正則表達(dá)式
x: 字符x(x可代表任何合法的字符);
\0mnn: 八進(jìn)制數(shù)Omnn所表示的字符;
\xhh: 十六進(jìn)制0xhh所表示的字符;
\uhhhh: 十六進(jìn)制0xhhhh所表示的UNICODE字符;
\t :制表符('\u0009');
\n: 新行(換行)符('\u000A');
\r: 回車符('\u000D');
\f: 換頁符('\u000C');
\a: 報(bào)警(bell)符('\u0007');
\e: Escape符('\u001B');
\cx: x對應(yīng)的控制符。例如,\cM匹配Ctrl-M。x值必須為A~Z或a~z之一;

3. 正則表達(dá)式中的特殊字符
$: 匹配一行的結(jié)尾。要匹配$字符本身,請使用\$;
^: 匹配一行的開頭。要匹配^字符本身,請使用\^;
(): 標(biāo)記子表達(dá)式的開始和結(jié)束位置。要匹配這些字符,請使用\(和\);
[]: 用于確定中括號表達(dá)式的開始和結(jié)束位置。要匹配這些字符,請使用\[和\];
{}: 用于標(biāo)記前面子表達(dá)式的出現(xiàn)的頻度。要匹配這些字符,請使用\{和\};
*: 指定前面子表達(dá)式可以出現(xiàn)零次或多次。要匹配*字符本身,請使用\*;
+: 指定前面子表達(dá)式可以出現(xiàn)一次或多次。要匹配+字符本身,請使用\+;
?: 指定前面子表達(dá)式可以出現(xiàn)零次或一次。要匹配?字符本身,請使用\?;
.: 匹配除換行符\n之外的任何單位字符。要匹配,字符本身,請使用\.;
\:用于轉(zhuǎn)義下一個(gè)字符,或指定八進(jìn)制、十六進(jìn)制符。要匹配\字符,請使用\\;
|:指定兩項(xiàng)之間任選一項(xiàng)。要匹配|字符本身,請使用\|;

4. 預(yù)定義字符
.: 可以匹配任何字符;
\d:匹配0~9的所有數(shù)字;
\D:匹配非數(shù)字;
\s:匹配所有的空白字符,包括空格、制表符、回車符、換頁符、換行符等;
\S:匹配所有的非空白字符;
\w:匹配所有的單詞字符,包括0~9所有的數(shù)字、26個(gè)英文字母和下劃線(_);
\W:匹配所有的非單詞字符;

5. 邊界匹配符
^: 行的開頭
$: 行的結(jié)尾
\b: 單詞的邊界
\B: 非單詞的邊界
\A: 輸入的開頭
\G: 前一個(gè)匹配的結(jié)尾
\Z: 輸入的結(jié)尾,僅用于最后的結(jié)束符
\z: 輸入的結(jié)尾

6. 表示匹配次數(shù)的符號
下圖顯示了表示匹配次數(shù)的符號,這些符號用來確定緊靠該符號左邊的符號出現(xiàn)的次數(shù):

2016511172027027.jpg (419×220)

(1)假設(shè)我們要在文本文件中搜索美國的社會安全號碼。這個(gè)號碼的格式是999-99-9999。用來匹配它的正則表達(dá)式如圖一所示。在正則表達(dá)式中,連字符(“-”)有著特殊的意義,它表示一個(gè)范圍,比如從0到9。因此,匹配社會安全號碼中的連字符號時(shí),它的前面要加上一個(gè)轉(zhuǎn)義字符“\”。

2016511172049773.gif (458×87)

(2)假設(shè)進(jìn)行搜索的時(shí)候,你希望連字符號可以出現(xiàn),也可以不出現(xiàn)——即,999-99-9999和999999999都屬于正確的格式。這時(shí),你可以在連字符號后面加上“?”數(shù)量限定符號,如圖所示:

2016511172108085.gif (512×93)

(3)下面我們再來看另外一個(gè)例子。美國汽車牌照的一種格式是四個(gè)數(shù)字加上二個(gè)字母。它的正則表達(dá)式前面是數(shù)字部分“[0-9]{4}”,再加上字母部分“[A-Z]{2}”。下圖顯示了完整的正則表達(dá)式。

2016511172149603.gif (269×66)

7.一些實(shí)例
例子1

function replace(content){
 var reg = '\\[(\\w+)\\]',
  pattern = new RegExp(reg, 'g');
 return content.replace(pattern, '<img src="img/$1.png">');
}
//或
function replace(content){
 return content.replace(/\[(\w+)\/g, '<img src="img/$1.png">');
}

例子2

//zero-width look behind的替換方案
//(?<=...)和(?<!...)
//方法一:反轉(zhuǎn)字符串,用lookahead進(jìn)行搜索,替換以后再倒回來,例如:
String.prototype.reverse = function () {
  return this.split('').reverse().join('');
}
//模擬'foo.bar|baz'.replace(/(?<=\.)b/, 'c') 即將前面有'.'的b換成c
'foo.bar|baz'.reverse().replace(/b(?=\.)/g, 'c').reverse() //foo.car|baz

//方法二:不用零寬斷言,自己判斷
//模擬'foo.bar|baz'.replace(/(?<=\.)b/, 'c') 即將前面有'.'的b換成c
'foo.bar|baz'.replace(/(\.)?b/, function ($0, $1) {
  return $1 ? $1 + 'c' : $0;  
}) //foo.car|baz
//模擬'foo.bar|baz'.replace(/(?<!\.)b/, 'c') 即將前面沒有'.'的b換成c
'foo.bar|baz'.replace(/(\.)?b/, function ($0, $1) {
  return $1 ? $0 : 'c';  
}) //foo.bar|caz
//這個(gè)方法在一些比較簡單的場景下有用,并且可以和lookahead一起用
//但也有很多場景無效,例如:
//'tttt'.replace(/(?<=t)t/g, 'x') 結(jié)果應(yīng)該是'txxx'
'tttt'.replace(/(t)?t/g, function ($0, $1) {
  return $1 ? $1 + 'x' : $0;
}) // txtx

例子3

$&符號的使用

function escapeRegExp(str) {
 return str.replace(/[abc]/g, "($&)");
}

var str = 'a12b34c';
console.log(escapeRegExp(str)); //(a)12(b)34(c)

相關(guān)文章

  • SpringBoot+MDC實(shí)現(xiàn)鏈路調(diào)用日志的方法

    SpringBoot+MDC實(shí)現(xiàn)鏈路調(diào)用日志的方法

    MDC是 log4j 、logback及l(fā)og4j2 提供的一種方便在多線程條件下記錄日志的功能,這篇文章主要介紹了SpringBoot+MDC實(shí)現(xiàn)鏈路調(diào)用日志,需要的朋友可以參考下
    2022-12-12
  • SpringBoot大學(xué)心理服務(wù)系統(tǒng)實(shí)現(xiàn)流程分步講解

    SpringBoot大學(xué)心理服務(wù)系統(tǒng)實(shí)現(xiàn)流程分步講解

    本系統(tǒng)主要論述了如何使用JAVA語言開發(fā)一個(gè)大學(xué)生心理服務(wù)系統(tǒng) ,本系統(tǒng)將嚴(yán)格按照軟件開發(fā)流程進(jìn)行各個(gè)階段的工作,采用B/S架構(gòu),面向?qū)ο缶幊趟枷脒M(jìn)行項(xiàng)目開發(fā)
    2022-09-09
  • spring項(xiàng)目對某條單據(jù)進(jìn)行加鎖處理的方法

    spring項(xiàng)目對某條單據(jù)進(jìn)行加鎖處理的方法

    這篇文章主要給大家介紹了關(guān)于spring項(xiàng)目對某條單據(jù)進(jìn)行加鎖處理的相關(guān)資料,用于對工單單據(jù)進(jìn)行加鎖和解鎖處理,以防止多用戶同時(shí)編輯同一單據(jù),前端傳遞參數(shù)包括單據(jù)ID、類型、鎖超時(shí)時(shí)間等,后端通過Redis實(shí)現(xiàn)鎖機(jī)制,需要的朋友可以參考下
    2024-11-11
  • 劍指Offer之Java算法習(xí)題精講二叉樹專題篇上

    劍指Offer之Java算法習(xí)題精講二叉樹專題篇上

    跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化
    2022-03-03
  • springboot使用redis的詳細(xì)步驟

    springboot使用redis的詳細(xì)步驟

    SpringBoot對常用的數(shù)據(jù)庫支持外,對NoSQL?數(shù)據(jù)庫也進(jìn)行了封裝自動化,下面這篇文章主要給大家介紹了關(guān)于springboot使用redis的詳細(xì)步驟,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • IDEA使用JDBC導(dǎo)入配置jar包連接MySQL數(shù)據(jù)庫

    IDEA使用JDBC導(dǎo)入配置jar包連接MySQL數(shù)據(jù)庫

    這篇文章介紹了IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-12-12
  • Spring中的AOP原理與使用詳解

    Spring中的AOP原理與使用詳解

    這篇文章主要介紹了Spring中的AOP原理與使用詳解,AOP意為面向切面編程,可以通過預(yù)編譯方式或運(yùn)行期動態(tài)代理實(shí)現(xiàn)在不修改源代碼的情況下給程序動態(tài)統(tǒng)一添加功能的一種技術(shù),需要的朋友可以參考下
    2023-12-12
  • Springboot2.x+ShardingSphere實(shí)現(xiàn)分庫分表的示例代碼

    Springboot2.x+ShardingSphere實(shí)現(xiàn)分庫分表的示例代碼

    這篇文章主要介紹了Springboot2.x+ShardingSphere實(shí)現(xiàn)分庫分表的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java使用線程同步解決線程安全問題詳解

    Java使用線程同步解決線程安全問題詳解

    線程安全是多線程編程時(shí)的計(jì)算機(jī)程序代碼中的一個(gè)概念。在擁有共享數(shù)據(jù)的多條線程并行執(zhí)行的程序中,線程安全的代碼會通過同步機(jī)制保證各個(gè)線程都可以正常且正確的執(zhí)行,不會出現(xiàn)數(shù)據(jù)污染等意外情況
    2022-05-05
  • Java線程在什么情況下可以終止

    Java線程在什么情況下可以終止

    Thread線程類自帶的stop方法,但是jdk不建議使用,因?yàn)閟top方法終止線程只是強(qiáng)行終止,內(nèi)存中部分值可能已發(fā)生變化,并未保證數(shù)據(jù)的一致性,將會導(dǎo)致線程安全問題,那么在什么情況下可以終止線程呢,本篇帶你探究一下
    2022-04-04

最新評論

临夏市| 三明市| 屏东市| 称多县| 安义县| 偃师市| 陇西县| 甘孜县| 河东区| 秦皇岛市| 嘉兴市| 永吉县| 巧家县| 辉县市| 台中市| 明水县| 贵阳市| 宁蒗| 盐边县| 朝阳市| 崇义县| 永嘉县| 鄂尔多斯市| 商南县| 开鲁县| 太仓市| 东阳市| 佳木斯市| 鹤岗市| 彰化县| 子洲县| 昌邑市| 茌平县| 天镇县| 南溪县| 和硕县| 平远县| 克山县| 苗栗县| 建平县| 莱芜市|