簡(jiǎn)介:
本文是系列博客的第一篇,主要講解和分析正則表達(dá)式規(guī)則以及JAVA中原生正則表達(dá)式引擎的使用。在后續(xù)的文章中會(huì)涉及基于NFA的正則表達(dá)式引擎內(nèi)部的工作原理,并在此基礎(chǔ)上用1000行左右的JAVA代碼,實(shí)現(xiàn)一個(gè)支持常用功能的正則表達(dá)式引擎。它支持貪婪匹配和懶惰匹配;支持零寬度字符(如“\b”, “\B”);支持常用字符集(如“\d”, “\s”等);支持自定義字符集(“[a-f]”,“[^b-k] ”等);支持所有重復(fù)操作(“*”,“+”,“?”,“{n,m}”等);支持通配符(“. ”);支持運(yùn)算符本身的轉(zhuǎn)義字符(“\*”,“\.”等);支持命名捕獲組。本系列博客的目的是理解正則表達(dá)式的內(nèi)部工作原理,所以沒有考慮正則表達(dá)式引擎的工作效率以及正負(fù)斷言和非命名捕獲組等不常用的功能,后續(xù)的工作將會(huì)對(duì)其優(yōu)化并完備其功能。由于正則表達(dá)式引擎的實(shí)現(xiàn)需要運(yùn)用數(shù)據(jù)結(jié)構(gòu)中的相關(guān)內(nèi)容,閱讀本系列博客前請(qǐng)熟悉棧,隊(duì)列,圖以及JAVA中容器等相關(guān)知識(shí)。
歡迎探討,如有錯(cuò)誤敬請(qǐng)指正
如需轉(zhuǎn)載,請(qǐng)注明出處 http://www.cnblogs.com/nullzx/
1. 正則表達(dá)式的作用
正則表達(dá)式的功能就是在文本串中搜索特定模式的字符串。我們以下面方框中豆瓣電影網(wǎng)頁中給出的信息為例,我們想在這些文本中找出所有的日期信息,我們發(fā)現(xiàn)日期信息的字符格式在以下文本串中具有特定的格式,都是xxxx-xx-xx的模式(比如2017-01-27),這里的x表示一個(gè)具體的數(shù)字。所以我們搜索的字符串的格式就是“\d{4}-\d{2}-\d{2}”,在正則表達(dá)式中\(zhòng)d表示數(shù)字,{n}表示重