Java編程中正則表達式的用法總結。本站提示廣大學習愛好者:(Java編程中正則表達式的用法總結)文章只能為提供參考,不一定能成為您想要的結果。以下是Java編程中正則表達式的用法總結正文
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. 表現婚配次數的符號
下圖顯示了表現婚配次數的符號,這些符號用來肯定緊靠該符號右邊的符號湧現的次數:
(1)假定我們要在文本文件中搜刮美國的社會平安號碼。這個號碼的格局是999-99-9999。用來婚配它的正則表達式如圖一所示。在正則表達式中,連字符(“-”)有著特別的意義,它表現一個規模,好比從0到9。是以,婚配社會平安號碼中的連字符號時,它的後面要加上一個本義字符“\”。
(2)假定停止搜刮的時刻,你願望連字符號可以湧現,也能夠不湧現——即,999-99-9999和999999999都屬於准確的格局。這時候,你可以在連字符號前面加上“?”數目限制符號,如圖所示:
(3)上面我們再來看別的一個例子。美國汽車派司的一種格局是四個數字加上二個字母。它的正則表達式後面是數字部門“[0-9]{4}”,再加上字母部門“[A-Z]{2}”。下圖顯示了完全的正則表達式。
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)