refer:
一直以來都逃避正則,但寫**不會一點正則有時候真的很痛苦,所以還是得學一下最基本的. 這裡做一下筆記唄.
1. \b
如果我們想匹配乙個單詞. 比如 hi, 那麼我們一定不希望它匹配到 his, hit 等等
那麼我們可以加上 \bhi\b 這樣就 ok 了. 它的邏輯是匹配的字前後不可以是字母或數字 (符號, 空格都是 ok 的)
2. .
點匹配萬物, 除了換行
3. \d
匹配數字, 小數點不匹配哦,不要傻傻的
4. \w
匹配字母,數字, 漢字和下劃線, 不要問我為什麼跑出乙個下劃線來...
如果不希望下劃線,也可以用另乙個寫法 [a-za-z0-9] 但這個不匹配漢字
5. \s
匹配空格和 tab
6 ^ 和 $
通常會一起用, ^ 是表示匹配第乙個字串開始. 比如 ^a 就是說第乙個字一定要是 a
如果只是 a 那麼意思是字串裡頭只要有 a 就可以了, ^ 就只能是開頭就要 a
$ 就是結尾.
所以我們驗證一整個字串通常就會用到這個了
上面講了匹配,接下來講一下要求匹配的數量
1. *
0次或多次, 比如 aaa 如果我只是寫 a 那麼會有 3 給 match (每乙個 match 裡面乙個字)
而我寫 a* 就只有乙個 match 裡面有 3 個字
2. +
1次或多次. 和 * 一樣, 唯一區別是 * 可以 0 次,這個最少一次
3. ?
0次或1次, 就是有或沒有. 重點不是數量了, 所以它是沒有多次概念的
4. n 就是任你寫乙個數字. 要配個幾個就幾個
5. n 個以上, 反過來是沒有的哦 《--這個是錯誤的
6. inclusive between n and m
再來說一下其它熱門的
1. 方括號: 方括號是單個匹配,如[abc]他限制的不是abc連續出現,而是只能是其中乙個,這樣寫那麼規則就是找到這個位置時只能是a或是b或是c;
方括號是正規表示式中最常用的,常用的用法有:[a-za-z0-9]匹配所有英文本母和數字,[^a-za-z0-9]匹配所有非英文本母和數字。
這段抄來的. 我還沒悟道, 之後再寫.
裡面不是連環的,而是類似單個 or , 比如 [aeiou] 匹配的不是連續而是 a 或 e 或 i 或 o 或 u.
另乙個特點是 [.] 匹配的是 . 而不是任意字元, 但是 [\s] 依然是匹配空格. 所以不能理解為裡面沒有元字元. 再研究
2. |
或者 \d | abc 就是說 3 個數字或者匹配 abc 字串
3. 反義 not
\s \s 以外
\w \w 以外,
\d \d 以外
[^aeiou] 加上 ^ 表示以外
[^a-za-z0-9_\s] 可以算是匹配符號
4. (\d) 圓括弧是把表示式抱起來用,和數學有點像.
然後就是這樣寫 (ab) ab出現 2次, 如果是 ab 那麼只是 b 出現 2 次.
(ab|cd) 配合 or 也是經常的用法
5. 斷言
refer
dada
如果想匹配出 dada 而已, 那麼就一定要用到斷言了.
斷言的功能是它可以寫一些匹配,但是最終缺沒有被匹配出來
像上面的表達是這樣的
我想找 .* whatever 但是前面必須是 後面必須是
4 種斷言寫法
(?=x)
(?<=x)
(?!x)
(?共同點是 (?)
然後一種是等於(=), 一種是不等於(!)
然後一種有箭頭(<), 一種沒有. 有箭頭的是說斷言放在前面. 沒有的就放後面
所以上面的寫法是
step 1 : *. 匹配所有
step 2 : (?<=).* 斷言在前面所有要箭頭
step 3: (?<=).*(?=<\/title>) 斷言在後面所以沒有箭頭
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 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 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...