如果你跟我一樣是菜鳥,那應該看看這篇正則表示式指南
這是一篇正則表示式的圖解指南,這個指南適合那些從未擺弄過,剛開始想要學習正則表示式,卻被嚇了個半死的人(像我一樣)。對沒有受過正規計算機教育的人來說,正則表示式好像是隻有最核心的 Unix 程式設計師才敢接觸。
但其實不然。一個好的正則表示式看似神奇,但要記住這一點:任何足夠先進的技術都跟魔法無異。所以我們不要被它給嚇到,這篇文章讓我們從最基礎的知識開始,瞭解什麼是正則表示式以及它們用於什麼?
開始!
正則表示式的核心是定義搜尋模式的字元序列。通常用在像grep這樣的工具中,可以在更長的文字字串中查詢我們想要的內容。
假設有這麼一個檔案 cat.txt ,內容很簡單,只有三行:
cat cat2 dog
如果我們使用 cat 這樣的表示式來進行檢索,那麼我們可以獲得結果
cat cat2
(對於硬核使用者來說,在這篇文章中,我把正則表示式和使用正則表示式的工具(如grep)混淆。我知道這在技術上是錯誤的,只是為了表達方便)
正則表示式適用於字元,而不是單詞
在這裡需要強調的是:正則表示式適用於字元,而不是單詞。串聯是隱含的。
如果我們使用正則表示式搜尋模式cat,我們不是在尋找“cat”這個詞,而是我們正在尋找字元 c 而後跟一個a,而後又跟 t 字元。
點和星號
最基本的字元是單個字元,如a,b,c等。現在讓我們介紹兩個特殊的客人。
點號(.) 字元匹配任何單個字元。例如,如果我們搜尋c.t,我們將匹配從cat到c0t或cAt的任何內容,我們將匹配任何單個c,後跟任何字元,後跟單個t 字元。
*(星號)字元有點難度。它修改前面的字元,然後匹配零個或多個字元。是的,再讀一遍,零個或多個字元。例如,cat *會匹配cat,catt,cattttt但也會匹配。
貓吃了我的作業
想象一下,我們逐行讀取檔案,第一行如下:
The cat ate my homework.
讓我們來看看我們如何匹配這一行中的 cat 這個模式。
我們首先將模式的第一個字元與句子中的第一個字元進行匹配。
如果我們找不到匹配項,我們會跳到該行中的下一個字元,並從該模式的第一個字元開始。
如果我們找到匹配項,我們將轉到模式和行中的下一個字元並重復此過程。當我們找到整個模式的匹配時,我們返回找到匹配的行。
這就是正則表示式最常用於最基本的級別,以便在更大的字串中找到更小的搜尋模式。
到目前為止,我們已經瞭解了正則表示式和兩個特殊字元,即 . 號和 *(星號),但還有更多。
正則表示式三劍客
正則表示式包含三個主要的元件:
-
錨
-
字符集
-
修飾符
這三個組成了...正則表示式三劍客!
我們先從錨點開始。
錨點
錨點指定圖案相對於線條的位置。這是兩個最重要的錨點:
-
^(插入符號)將您的模式匹配到行的開頭。例如,模式^ 1匹配以1開頭的任何行。
-
$(美元)將您的模式匹配到句子的末尾。例如,9 $匹配任何以9結尾的行。
請注意,在這兩種情況下,模式必須分別在模式中的第一個和最後一個。^ 1在一行開頭匹配1,但1 ^匹配1後跟^。同樣,1 $匹配以1結尾的行,但$ 1匹配一個美元符號,後跟行上的任意位置1。
下一部分是字符集。
字符集
字符集是正則表示式的麵包和黃油。單個字元,比如a,是最原子的字符集(一個元素的集合)。但是我們可以使用像[0-9]那樣匹配任何單個數字的正則表示式來做瘋狂的事情,或者如果你還記得我們可以製作模式[0-9] [0-9] *(這個模式匹配的是什麼) 作為讀者的練習)。
其他一些重要的字符集:
-
[0-9] 匹配任意單個數字
-
[a-z] 匹配任意小寫字母
-
[A-Z] 匹配任意大寫字母
我們也可以合併多個字符集:
-
[A-Za-z0-9] 匹配任意大寫、小寫字母以及數字
修飾符
這裡我不想太深入的介紹,我們之前已經使用的 *(星號)是一個修飾符。修飾符會更改其前面字元的含義。還有許多其他修飾符,但從 * 開始比較容易理解。
一個具體的例子
首先我們快速生成一個包含某些文字的檔案:
$ echo "The cat jumps long time \nThen we also have the fact that these are words.\n1234 this is a test post please ignore." >> grep.txt
檔案內容如下:
$ cat grep.txt
The cat jumps long time
Then we also have the fact that these are words.
1234 this is a test post please ignore.
然後咱們搜尋一下 cat
$ grep "cat" grep.txt
The cat jumps long time
接下來我們搜尋任意以數字開頭的行
$ grep "^[0-9]" grep.txt
1234 this is a test post please ignore.
你剛剛就在使用正則表示式,是不是棒極了?
總結
在這篇文章中我們介紹了:
-
正則表示式的基本功能
-
正則表示式的三個主要的元件:錨點、字符集和修飾符
-
. (點), * (星號), ^ (插入符號) 以及 $ (美元符).
-
一些字符集 [0-9], [a-z], [A-Z] 和字符集的合併
這篇博文的目的是通過插圖介紹使正則表示式更加容易理解。
如果你已經擺脫了正則表示式在技術上的困難,你最終就得到的是一個相對簡單但超級強大的工具。
給自己點贊吧,你已經沒資格當菜鳥了!
本文翻譯自 https://www.janmeppe.com/blog/regex-for-noobs/ 。
圖文版請看公眾號“紅薯胡說”
相關推薦
如果你跟我一樣是菜鳥,那應該看看這篇正則表示式指南
這是一篇正則表示式的圖解指南,這個指南適合那些從未擺弄過,剛開始想要學習正則表示式,卻被嚇了個半死的人(像我一樣)。對沒有受過正規
如果你想搞懂“分散式鎖”,必須要看這篇文章 ,看了很意外!
對於鎖大家肯定不會陌生,在 Java 中 synchronized 關鍵字和 ReentrantLock 可重入鎖在我們的程式碼中是經常見的,一般我們用其在多執行緒環境中控制對資源的併發訪問。 但是隨著分散式的快速發展,本地的加鎖往往不能滿足我們的需要,在我們的分散式環境中上面加鎖的方法
[HDU 2520] 我是菜鳥,我怕誰(不一樣的for迴圈)
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=2520 1 //學學不一樣的for迴圈 2 #include<iostream> 3 #include<cstdio> 4 #include<cmath> 5
我是菜鳥,我怕誰
Description lin2144是一隻小菜鳥,都是笨鳥先飛,lin2144想來個菜鳥先飛,他從0點出發 一開始的飛行速度為1m/s,每過一個單位時間lin2144的飛行速度比上一個單位時間的飛行速度快2m/s,問n (0 < n < 10^5)
【碼海座標】沒錯我是菜鳥,但是我不會放棄努力
專欄達人 授予成功建立個人部落格專欄
【小橋流水的專欄】我是菜鳥,但是菜鳥在慢慢地追著大牛的步伐。。。
博主簡介 南郵碩士畢業,現就職於奇虎360上海研發中心,研究演算法資料結構,C++,Python,Linux,Docker技術,安全准入技術,網路安全,服務計算。博主QQ:673771573
如果你未曾深入瞭解python,請先看看這篇python簡史!
python與人工智慧緊緊的聯絡在一起,現在很多年輕的開發者都開始學習Python,文章清晰且幽默的講述了python的發展史,希望對還在自學python的你有些幫助,或重拾自學python的激情。 學習Python中有不明白推薦加入交流群 &n
我當菜鳥的那幾年 nuxt.js axios 封裝
nuxt.js axios 封裝 1,首先安裝axios npm install axios 2,在專案檔案pluginsw資料夾裡(哪個資料夾自己隨便啊)建立axios.js,程式碼如下: import axios from 'axios'//定義fetch函式,config為配置export fu
如果你的shiro沒學明白,那麽應該看看這篇文章,將shiro整合進springboot
最小 3.2 開始 depend art tostring 登陸 string int 最近在做項目的時候需要用到shiro做認證和授權來管理資源 在網上看了很多文章,發現大多數都是把官方文檔的簡介摘抄一段,然後就開始貼代碼,告訴你怎麽怎麽做,怎麽怎麽做 相信很多小夥伴即使
(轉)清華博士王垠的退學申請——研究生,無論你想不想搞研究,都該讀讀這篇文章。
我覺得再沒有從實際出發的目標,我的研究就會完全變成紙張了,就像我高中感覺到的一樣。所以後來我就自己設立了一個研究方向,我把自己稱為“研 究博士生”,我要去了解博士生都是怎麼樣生活的。我就想知道有多少學生有跟我類似的困境。我跟很多朋友談過,去了解他們的苦衷,研究生也有,本科的也有。我覺得我還應該瞭解更多的人,就
replace限制文字框只能輸入數字,數字和字母等的正則表示式
1.文字框只能輸入數字程式碼(小數點也不能輸入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')">&
java驗證,”支援6-20個字母、數字、下劃線或減號,以字母開頭“這個的正則表示式怎麼寫?
轉自:https://yq.aliyun.com/wenzhang/show_96854 問題描述 java驗證,”支援6-20個字母、數字、下劃線或減號,以字母開頭“這個的正則表示式怎麼寫? 驗證”支援6-20個字母、數字、下劃線或減號,以字母開頭“的正則表示式
#計算字串中所有數字和,連續當一個數字 (正則表示式,能不用就不用)
s='12as3d6f20ads01sd02' import re def he(s): c=re.compile('\d+')#建立正則表示式 l=c.findall(s)#返回所有匹配結果的列表 sum=0 #和 for i in l: #遍歷
限制QLineEdit的數值輸入範圍(QT正則表示式方法),順便簡單介紹下QT正則表示式方法
首先看幾個例子: 1.限制浮點數輸入範圍為[-180,180] QRegexp rx("^-?(180|([1-9]?[0-9]|1[0-7][0-9])(\\.\\d)?)$"); QRegExpValidator *pReg = new QRegExpV
java 正則驗證 數字,字母,下劃線還有漢字的正則表示式和email
Java程式碼 34555#5' [\u4E00-\u9FA50-9a-zA-Z_] eiieng_89_ ---> eiieng_89_ _';'eiieng_88&*9_ --> _';'eiieng_88&*9_ _';'eiieng_88_&*9_ -->
只需體驗三分鐘,你就會跟我一樣,愛上這款Toast
這可能是效能最優、使用最簡單,支援自定義,不需要通知欄許可權的吐司 已投入公司專案多時,沒有任何毛病,可勝任任何需求,點選此處下載Demo 想了解實現原理的可以點選此連結檢視:ToastUtils 原始碼 整合步驟 dependencies {
小說腦洞:《你跟我在一起,就為了讓我教你寫代碼?》
讓我 技術 love 女程序員 簡介 保留 原因 靈感 方便 簡介:一個其貌不揚的女程序員(很厲害),被一個帥哥瘋狂追求,原因竟然是為了學寫代碼? 風格:教學類。 篇幅:中篇。 開篇:一個帥哥偶遇一個女程序員(很厲害!),為了學習技術,出賣
小說腦洞:《你跟我在一起,就為了讓我教你寫程式碼?》
簡介:一個其貌不揚的女程式設計師(很厲害),被一個帥哥瘋狂追求,原因竟然是為了學寫程式碼? 風格:教學類。 篇幅:中篇。 開篇:一個帥哥偶遇一個女程式設計師(很厲害!)
菜鳥,程序員,大師,神人 四個等級寫出代碼的區別.
python 程序 lte and odin mat env math odi # !/usr/bin/env python# -*- coding: utf-8 -*-# 據說係菜鳥,程序員,大師,神人 四個等級寫出代碼的區別...import math as m#for
如果你不了解Petya與Wannacry的區別,真應該看看!
blue 觀察 公司 cve 俄羅斯 設置 烏克蘭 目前 中毒 中毒現象 Petya(彼佳) 病不針對文件進行加密,病會修改系統的MBR引導扇區,重啟電腦後加密整個磁盤。 Wannacry(永恒之藍) 用戶中毒之後病會加密指定類型文件(文件類型包含上百種),然後設置