国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java編程中正則表達式的用法總結

2019-11-26 14:21:20
字體:
來源:轉載
供稿:網友

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

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

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

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

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

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

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

2016511172027027.jpg (419×220)

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

2016511172049773.gif (458×87)

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

2016511172108085.gif (512×93)

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

2016511172149603.gif (269×66)

7.一些實例
例子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的替換方案//(?<=...)和(?<!...)//方法一:反轉字符串,用lookahead進行搜索,替換以后再倒回來,例如: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//這個方法在一些比較簡單的場景下有用,并且可以和lookahead一起用//但也有很多場景無效,例如://'tttt'.replace(/(?<=t)t/g, 'x') 結果應該是'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)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 那曲县| 彩票| 临沭县| 紫云| 隆回县| 伊金霍洛旗| 牙克石市| 上杭县| 阿尔山市| 溆浦县| 尼玛县| 山东省| 阳东县| 房产| 西丰县| 宜黄县| 宝丰县| 平湖市| 河北省| 英山县| 乡宁县| 库伦旗| 岗巴县| 新河县| 张北县| 光泽县| 尉犁县| 元阳县| 杭锦后旗| 璧山县| 景德镇市| 东莞市| 安远县| 伊宁市| 泽州县| 南江县| 海宁市| 大渡口区| 井冈山市| 澄城县| 克拉玛依市|