iOS正則表達(dá)式

正則表達(dá)式(regular expression)描述了一種字符串匹配的模式(pattern)另绩,可以用來檢查一個(gè)串是否含有某種子串、將匹配的子串替換或者從某個(gè)串中取出符合某個(gè)條件的子串等墩瞳。
^ 指出一個(gè)字符串的開始
$指出一個(gè)字符串的結(jié)束
"^iOS" 以iOS開頭
"iOS$" 以iOS結(jié)尾
"^apple$" 開始和結(jié)尾都是apple的字符串兰吟,這個(gè)是唯一的,實(shí)際上就是apple
"apple" 包含apple
* , +,? 重復(fù)出現(xiàn)的次數(shù)。 ? 0~1; + 1~n; * 0~n
"ab*"一個(gè)a后面跟著0~n個(gè)b
"ab+":一個(gè)a后面跟著至少一個(gè)b
"ab?":一個(gè)a后面跟著0~1個(gè)b
"a?b+$":末尾有01個(gè)a跟著1n個(gè)b
{} 表示重復(fù)的具體范圍叉瘩。
"ab{4}" 一個(gè)a跟著4b
"ab{1,}" 一個(gè)a跟著至少1個(gè)b
"ab{3,5}" 一個(gè)a跟著3~5個(gè)b
*可以用{0竟宋,}表示提完,+可以用{1,}表示丘侠,?可以用{0徒欣,1}表示
| “或”操作:
"a|b" 一個(gè)字符串里有a或b
"(a|bcd)ef" aef或bcdef
"(a|b)+c" 一串a(chǎn)和b混合的字符串后面跟一個(gè)c;
[ ]表示在括號(hào)內(nèi)的眾多字符中蜗字,選擇1-n個(gè)括號(hào)內(nèi)的符合語法的字符作為結(jié)果
"[ab]" 一個(gè)a或b(相當(dāng)于"a|b")打肝;
"[a-d]"a到d中的一個(gè)(相當(dāng)于"a|b|c|d"或者"[abcd]"
"^[a-zA-Z]" 以字母開頭
"[0-9]a" a前有一位的數(shù)字
"[a-zA-Z0-9]$" 以一個(gè)字母或數(shù)字結(jié)束
. 任意字符
"a.[a-z]" a后面跟一個(gè)任意字符和一個(gè)小寫字母
"^.{5}$" 長度為5的字符串
"(.)\1" 兩個(gè)連續(xù)任意字符
"(.)\1{2}" 三個(gè)個(gè)連續(xù)任意字符
在方括號(hào)里用^表示不希望出現(xiàn)的字符,^應(yīng)在方括號(hào)里的第一位秽澳。
"@[^a-zA-Z]@"表示兩個(gè)@中不應(yīng)該出現(xiàn)字母
"\d" 一個(gè)數(shù)字字符
"\D" 一個(gè)非數(shù)字字符
"\w " 包括下劃線的任何單詞字符
"\W" 匹配任何非單詞字符
iOS中書寫正則表達(dá)式闯睹,碰到轉(zhuǎn)義字符,多加一個(gè)\

正則表達(dá)式在IOS開發(fā)中的應(yīng)用
一担神、根據(jù)正則表達(dá)式創(chuàng)建NSRegularExpression對(duì)象
初始化方法
<pre>
public init(pattern: String, options: NSRegularExpression.Options = []) throws
</pre>
其中楼吃,pattern是正則表達(dá)式,對(duì)于option參數(shù)妄讯,在oc中它是一個(gè)枚舉孩锡,swift中它是結(jié)構(gòu)體options中的屬性
<pre>
public struct Options : OptionSet {

    public init(rawValue: UInt)

    
    public static var caseInsensitive: NSRegularExpression.Options { get }

    public static var allowCommentsAndWhitespace: NSRegularExpression.Options { get }

    public static var ignoreMetacharacters: NSRegularExpression.Options { get }

    public static var dotMatchesLineSeparators: NSRegularExpression.Options { get }

    public static var anchorsMatchLines: NSRegularExpression.Options { get }

    public static var useUnixLineSeparators: NSRegularExpression.Options { get }

    public static var useUnicodeWordBoundaries: NSRegularExpression.Options { get }
}

</pre>
<pre>
caseInsensitive //不區(qū)分字母大小寫
allowCommentsAndWhitespace //忽略掉正則表達(dá)式中的空格和#號(hào)之后的字符
ignoreMetacharacters //將正則表達(dá)式整體作為字符串處理
dotMatchesLineSeparators //允許.匹配任何字符,包括換行符
anchorsMatchLines //允許^和$符號(hào)匹配行的開頭和結(jié)尾
useUnixLineSeparators //設(shè)置\n為唯一的行分隔符亥贸,否則所有的都有效躬窜。
useUnicodeWordBoundaries //使用Unicode TR#29標(biāo)準(zhǔn)作為詞的邊界,否則所有傳統(tǒng)正則表達(dá)式的詞邊界都有效
</pre>

二炕置、執(zhí)行查詢操作
1荣挨、以block的形式返回查詢結(jié)果
<pre>
open func enumerateMatches(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange, using block: (NSTextCheckingResult?, NSRegularExpression.MatchingFlags, UnsafeMutablePointer<ObjCBool>) -> Swift.Void)
</pre>
參數(shù)string是待查詢的字符串,options的參數(shù)如下:
<pre>
public struct MatchingOptions : OptionSet {

    public init(rawValue: UInt)

    
    public static var reportProgress: NSRegularExpression.MatchingOptions { get }
    public static var reportCompletion: NSRegularExpression.MatchingOptions { get } 
    public static var anchored: NSRegularExpression.MatchingOptions { get }

    public static var withTransparentBounds: NSRegularExpression.MatchingOptions { get }

    public static var withoutAnchoringBounds: NSRegularExpression.MatchingOptions { get } 

}
</pre>
<pre>
reportProgress //找到最長的匹配字符串后調(diào)用block回調(diào)
reportCompletion //找到任何一個(gè)匹配串后都回調(diào)一次block
anchored //從匹配范圍的開始出進(jìn)行極限匹配
withTransparentBounds //允許匹配的范圍超出設(shè)置的范圍
withoutAnchoringBounds //禁止^和$自動(dòng)匹配行還是和結(jié)束
</pre>
參數(shù)block回調(diào)中朴摊,NSTextCheckingResult類型的參數(shù)即是查詢結(jié)果默垄;MatchingFlags類型的參數(shù)flags如下:
<pre>
public struct MatchingFlags : OptionSet {

    public init(rawValue: UInt)

 
    public static var progress: NSRegularExpression.MatchingFlags { get } 
    public static var completed: NSRegularExpression.MatchingFlags { get }

    public static var hitEnd: NSRegularExpression.MatchingFlags { get } 

    public static var requiredEnd: NSRegularExpression.MatchingFlags { get }

    public static var internalError: NSRegularExpression.MatchingFlags { get }

}
</pre>
<pre>
progress //匹配到最長串時(shí)被設(shè)置
completed //全部分配完成后被設(shè)置
hitEnd //匹配到設(shè)置范圍的末尾時(shí)被設(shè)置
requiredEnd //當(dāng)前匹配到的字符串在匹配范圍的末尾時(shí)被設(shè)置
internalError //由于錯(cuò)誤導(dǎo)致的匹配失敗時(shí)被設(shè)置
</pre>
block中還有個(gè)類型為UnsafeMutablePointer<ObjCBool>的參數(shù),給它的pointee屬性賦值為true,之后便會(huì)停止查找

2、查找結(jié)果以數(shù)組的形式返回
<pre>
open func matches(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange) -> [NSTextCheckingResult]
</pre>
3甚纲、返回匹配到的個(gè)數(shù)
<pre>
open func numberOfMatches(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange) -> Int
</pre>
4口锭、返回匹配到的第一個(gè)結(jié)果
<pre>
open func firstMatch(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange) -> NSTextCheckingResult?
</pre>
5、返回匹配到的第一個(gè)結(jié)果的range
<pre>
open func rangeOfFirstMatch(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange) -> NSRange
</pre>
6介杆、將匹配到的結(jié)果替換為新的字符串鹃操,并將替換后生成的新的字符串返回
<pre>
open func stringByReplacingMatches(in string: String, options: NSRegularExpression.MatchingOptions = [], range: NSRange, withTemplate templ: String) -> String
</pre>
7韭寸、將原字符串中匹配到的結(jié)果用指定的字符串替換,返回值為Int類型荆隘,是匹配并替 換的個(gè)數(shù)
<pre>
open func replaceMatches(in string: NSMutableString, options: NSRegularExpression.MatchingOptions = [], range: NSRange, withTemplate templ: String) -> Int
</pre>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恩伺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子臭胜,更是在濱河造成了極大的恐慌莫其,老刑警劉巖癞尚,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耸三,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡浇揩,警方通過查閱死者的電腦和手機(jī)仪壮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胳徽,“玉大人积锅,你說我怎么就攤上這事⊙粒” “怎么了缚陷?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長往核。 經(jīng)常有香客問我箫爷,道長,這世上最難降的妖魔是什么聂儒? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任虎锚,我火速辦了婚禮,結(jié)果婚禮上衩婚,老公的妹妹穿的比我還像新娘窜护。我一直安慰自己,他們只是感情好非春,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布柱徙。 她就那樣靜靜地躺著,像睡著了一般奇昙。 火紅的嫁衣襯著肌膚如雪护侮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天敬矩,我揣著相機(jī)與錄音概行,去河邊找鬼。 笑死弧岳,一個(gè)胖子當(dāng)著我的面吹牛凳忙,可吹牛的內(nèi)容都是我干的业踏。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼涧卵,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼勤家!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柳恐,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤伐脖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后乐设,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讼庇,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年近尚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蠕啄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡戈锻,死狀恐怖歼跟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情格遭,我是刑警寧澤哈街,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站拒迅,受9級(jí)特大地震影響骚秦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坪它,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一骤竹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧往毡,春花似錦蒙揣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嗤详,卻和暖如春个扰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背葱色。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國打工递宅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓办龄,卻偏偏與公主長得像烘绽,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子俐填,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 一安接、什么是正則表達(dá)式 正則表達(dá)式,又稱正規(guī)表示法英融,是對(duì)字符串操作的一種邏輯公式盏檐。正則表達(dá)式可以檢測(cè)給定的字符串是否...
    Helen_kay閱讀 2,754評(píng)論 0 2
  • 一、什么是正則表達(dá)式 正則表達(dá)式驶悟,又稱正規(guī)表示法胡野,是對(duì)字符串操作的一種邏輯公式。正則表達(dá)式可以檢測(cè)給定的字符串是否...
    見哥哥長高了閱讀 2,005評(píng)論 6 48
  • iOS -正則表達(dá)式的簡單使用 ?建議收藏撩银,用到時(shí)候一查就明白了 下面兩個(gè)方法我用的也不是很熟練给涕,如果有懂得朋友歡...
    xx_cc閱讀 8,558評(píng)論 17 177
  • 一. 正則表達(dá)式和其他方法的比較 二. 正則表達(dá)式的簡單使用 2.1 特殊符號(hào)^和$。他們的作用是分別指出一個(gè)字符...
    iYeso閱讀 603評(píng)論 0 10
  • 什么是正則表達(dá)式 正則表達(dá)式额获,又稱正規(guī)表示法,是對(duì)字符串操作的一種邏輯公式恭应。正則表達(dá)式可以檢測(cè)給定的字符串是否符合...
    Lonely__M閱讀 3,043評(píng)論 4 48