Oc 正規表示式 詳解 01 簡介

2021-08-10 02:49:18 字數 3064 閱讀 7188

一、正規表示式基本概念

1.什麼是正規表示式 正規表示式,又稱正規表示法,是對字串操作的一種邏輯公式。 正規表示式可以檢測 給定的字串是否符合我們定義的邏輯,也可以從字串中獲取我們想要的特定部分。它可以 迅速地用極簡單的方式達到字串的複雜控制。

2.什麼是謂詞 cocoa框架中的nspredicate用於查詢,原理和用法都類似於sql中的where,作用相當於資料庫的過濾取。 我們可以編寫簡單的謂詞語句,就可以從陣列中過濾出我們想要的資料。

二.正規表示式的使用

//正規表示式的使用 

- (void)useregularexpressions

:  表示式重複n次

:  表示式至少重複m次,最多重複n次

:  表示式至少重複m次

?     :  匹配表示式0次或者1次,相當於

+     :  表示式至少出現1次,相當於

*     :  表示式不出現或出現任意次,相當於

*/ nsstring *searchstring1_5 = @」it costs $12.5」;

nsstring *regexstring1_5 = @」\d+\.?\d」;

nsstring *matchedstring1_5 = [searchstring1_5 stringbymatching:regexstring1_5];

nslog(@」matchedstring1_5:%@」,matchedstring1_5); // 輸出結果: 12.5

/———————1.6其他一些代表抽象意義的特殊符號————————–/

// 一些符號在表示式中代表抽象的特殊意義

/* ^     : 與字串開始的地方匹配,不匹配任何字元 :與

字串結

束的地方

匹配,不

匹配任何

字元\b:

匹配乙個

單詞邊界

,也就是

單詞和空

格之間的

位置,不

匹配任何

字元∗/

//進一

步說明:

」\b」與

「」和「

」 類似,本身不匹配任何字元,但是它要求它在匹配結果中所處位置的左右兩邊,其中一邊是 「\w」 範圍,另一邊是 非」\w」 的範圍

nsstring *searchstring1_6 = @」@@@abc」;

nsstring *regexstring1_6 = @」.\b.」;

nsstring *matchedstring1_6 = [searchstring1_6 stringbymatching:regexstring1_6];

nslog(@」matchedstring1_6:%@」,matchedstring1_6); // 輸出結果: @a

/———————2.1匹配次數中的貪婪與非貪婪————————–/

// 1)在使用修飾匹配次數的特殊符號」」, 「」, 「?」, 「*」, 「+」可以使同乙個表示式能夠匹配不同的次數,這種重複匹配不定次數的表示式在匹配過程中,總是盡可能多的匹配。如:

nsstring *searchstring2_1_1 = @」d***d***d」;

nsstring *regexstring2_1_1 = @」(d)(\w+)(d)」;

nsstring *matchedstring2_1_1 = [searchstring2_1_1 stringbymatching:regexstring2_1_1];

nslog(@」matchedstring2_1_1:%@」,matchedstring2_1_1); // 輸出結果: d***d***d

// 2)在修飾匹配次數的特殊符號後再加上乙個 「?」 號,則可以使匹配次數不定的表示式盡可能少的匹配,這種匹配原則叫作 「非貪婪」 模式,也叫作 「勉強」 模式

nsstring *regexstring2_1_2 = @」(d)(\w+?)(d)」;

nsstring *matchedstring2_1_2 = [searchstring2_1_1 stringbymatching:regexstring2_1_2];

nslog(@」matchedstring2_1_2:%@」,matchedstring2_1_2); // 輸出結果: d***d

/———————2.2反向引用————————————–/

// 使用小括號指定乙個子表示式後,匹配這個子表示式的文字(也就是此分組捕獲的內容)可以在表示式或其它程式中作進一步的處理。預設情況下,每個分組會自動擁有乙個組號,規則是:從左向右,以分組的左括號為標誌,第乙個出現的分組的組號為1,第二個為2,以此類推

nsstring *searchstring2_2 = @」go

go「;

nsstring *regexstring2_2 = @」\b(\w+)\b\s+\1\b」;

nsstring *matchedstring2_2 = [searchstring2_2 stringbymatching:regexstring2_2];

nslog(@」matchedstring2_2:%@」,matchedstring2_2); // 輸出結果: go go

/—————-2.3零寬斷言——————————————-/

// 零寬斷言用於查詢在某些內容(但並不包括這些內容)之前或之後的東西,也就是說它們像\b,^,$那樣用於指定乙個位置,這個位置應該滿足一定的條件(即斷言),因此它們也被稱為零寬斷言

/* 1)捕獲

(exp)         : 匹配exp,並捕獲文字到自動命名的組裡

(?exp)  : 匹配exp,並捕獲文字到名稱為name的組裡,也可以寫成(?』name』exp)

(?:exp)       : 匹配exp,不捕獲匹配的文字,也不給此分組分配組號零寬斷言,可節約效能,提高效率

2)零寬斷言

(?=exp)       : 匹配exp前面的位置

(?<=exp)      : 匹配exp後面的位置

(?!exp)       : 匹配後面跟的不是exp的位置

(?

oc正規表示式

在電腦科學中,是指乙個用來描述或者匹配一系列符合某個句法規則的字串的單個字串。在很多文字編輯器或其他工具裡,正規表示式通常被用來檢索和 或替換那些符合某個模式的文字內容。許多程式語言都支援利用正規表示式進行字串操作。正規表示式用於字串處理 表單驗證等場合,實用高效。現將一些常用的表示式收集於此,以備...

OC 正規表示式

常用的第三方正則庫 這裡面涉及到的正規表示式語法 d 匹配任何乙個數字,即 0 9 d 表示1個以上的數字 d 強行加上小括號,分組,相當把這個值緩衝起來,在 裡用 mystring substringwithrange match rangeatindex 1 可以提取出來回合數 表示小句點 s ...

JS正規表示式詳解01

查詢符合條件的乙個字串的位置,找不到返回 1 abc search b return 1 abc search d return 1 abcabc search b g return 1 查詢符合條件的字串,並進行替換,找不到不進行替換 abcabc replace b 2 return a2cab...