ripgrep
平時(shí),我們使用Xcode 查找文件的快捷鍵是shift+command+o,然后按shift+command+j快速定位到剛剛查找到的文件目錄。如果我們不是在使用Xcode呢?怎么查找?
ripgrep 剛好可以解決這個(gè)問題,rust寫的一個(gè)支持正則表達(dá)式搜索文件、字符串的工具,支持正則也是它強(qiáng)大的所在吧!
安裝
brew install ripgrep
使用 具體點(diǎn)擊鏈接
rg <搜索的關(guān)鍵字符串,以及正則表達(dá)> <某個(gè)文件或者某個(gè)目錄>
rg fast README.md
正則表達(dá)式
特殊字符
$ 匹配輸入字符串的結(jié)尾位置
( ) 標(biāo)記一個(gè)子表達(dá)式的開始和結(jié)束位置
* 匹配前面的子表達(dá)式零次或多次
+ 匹配前面的子表達(dá)式一次或多次
. 匹配除換行符 \n 之外的任何單字符
[ 標(biāo)記一個(gè)中括號(hào)表達(dá)式的開始
? 匹配前面的子表達(dá)式零次或一次,或指明一個(gè)非貪婪限定符
\ 將下一個(gè)字符標(biāo)記為或特殊字符、或原義字符、或向后引用、或八進(jìn)制轉(zhuǎn)義符
^ 匹配輸入字符串的開始位置,除非在方括號(hào)表達(dá)式中使用,此時(shí)它表示不接受該字符集合
{ 標(biāo)記限定符表達(dá)式的開始
| 指明兩項(xiàng)之間的一個(gè)選擇
限定符
*
- 匹配前面的子表達(dá)式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等價(jià)于{0,}
+
- 匹配前面的子表達(dá)式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價(jià)于 {1,}
?
- 匹配前面的子表達(dá)式零次或一次。例如,"do(es)?" 可以匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等價(jià)于 {0,1}
{n}
- n是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個(gè) o
{n,}
- n是一個(gè)非負(fù)整數(shù)。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價(jià)于 'o+'。'o{0,}' 則等價(jià)于 'o*'
{n,m}
- m和n均為非負(fù)整數(shù),其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個(gè) o。'o{0,1}' 等價(jià)于 'o?'。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格
定位符
^ 匹配輸入字符串開始的位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,^ 還會(huì)與 \n 或 \r 之后的位置匹配
$ 匹配輸入字符串結(jié)尾的位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,$ 還會(huì)與 \n 或 \r 之前的位置匹配
\b 匹配一個(gè)單詞邊界,即字與空格間的位置
\B 非單詞邊界匹配
應(yīng)用
iOS中舉例:判斷 昵稱職能由中文,字母或者數(shù)字組成
// 判斷 昵稱職能由中文,字母或者數(shù)字組成
- (BOOL)isHaveIllegalCharacter {
NSString *regex = @"[a-zA-Z\u4e00-\u9fa5][a-zA-Z0-9\u4e00-\u9fa5]+";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
if(![pred evaluateWithObject:self])
{
return YES;
} else {
return NO;
}
}
密碼的強(qiáng)度必須是包含大小寫字母和數(shù)字的組合,不能使用特殊字符,長度在8-10之間。
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
字符串僅能是中文
^[\u4e00-\u9fa5]{0,}$
由數(shù)字、26個(gè)英文字母或下劃線組成的字符串
^\w+$
校驗(yàn)E-Mail地址是E-mail地址合規(guī)性的正則檢查語句
[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?
校驗(yàn)身份證號(hào)碼,下面是身份證號(hào)碼的正則校驗(yàn)。15或18位
15位:
^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
18位:
^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$
yyyy-mm-dd格式的日期校驗(yàn),已考慮平閏年
^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$
金額校驗(yàn),精確到2位小數(shù)
^[0-9]+(.[0-9]{2})?$
校驗(yàn)手機(jī)號(hào),下面是國內(nèi)13、15、18開頭的手機(jī)號(hào)正則表達(dá)式。(可根據(jù)目前國內(nèi)收集號(hào)擴(kuò)展前兩位開頭號(hào)碼)
^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$