專門為初學者編寫的正則表達式入門教程_正則表達式

來源:腳本之家  責任編輯:小易  

python正則匹配以xx開頭以xx結尾的單詞的步驟:1、假設需要匹配的字符串為:site sea sue sweet see case sse ssee loses 需要匹配的為以s開頭以e 結尾的單詞。正確的正則式為:\\bs\\S*?e\\b2、使用python中re.findall函數表示匹配字符串中所有的可能選項,re是python里的正則表達式模塊。findall是其中一個方法,用來按照提供的正則表達式,去匹配文本中的所有符合條件的字符串。3、代碼和結果如下:text='site sea sue sweet see case sse ssee loses're.findall(r'\\bs\\S*?e\\b',text)結果為:['site','sue','see','sse','ssee']擴展資料:python正則匹配,以某某開頭某某結尾的最長子串匹配代碼如下:regVersions=re.search(r'(V|v)[0-9].*[0-9]',filename)if regVersions:print regVersions.group()www.anxorj.tw防采集請勿采集本網。

這是一篇翻譯文章。我學過很多次正則表達式,總是學了忘,忘了學,一到用的時候還是只能靠搜索引擎。

以下是一些常用的正則表達式,覺得實用就收藏一下吧。只能輸入數字:\"^[0-9]*。只能輸入n位的數字:\"^\\d{n}$。只能輸入至少n位的數字:\"^\\d{n,}$。只能輸入m~n位的數字:。\\d{m,n}$ 只能輸入零和非零

這回看到這個正則教程,感覺非常驚喜。嘗試翻譯了一遍,譯得不好,大家可以看原文,很容易理解。

假如你需要匹配文本中的字符\"\\\",那么使用編程語言表示的正則表達式里將需要4個反斜杠\"\\\\\\\\\":前兩個和后兩個分別用于在編程語言里轉義成反斜杠,轉換成兩個反斜杠后再在正則表達式里轉義成一個反斜杠。

原文地址:https://refrf.shreyasminocha.me/

1 介紹

(\\\\d)\\\\1{4} 少了一個斜杠 正則表達式為(\\d)\\1{4} 放入字符串中的時候,應該用 \\ 將 \\ 轉義,則為Pattern.compile(\"(\\\\d)\\\\1{4}\");

正則表達式允許定義一種模式,并通過這種模式針對字符串執行對應的操作。與模式匹配的子字符串稱為“匹配”。

將ABC替換成ABCABC容易,查找(.{3}),替換為\\1\\1即可。你的具體問題沒有描述清楚,需要澄清以下幾點: 1、000-999的數字列表是什么樣子?一行一個?每行的格式是啥?2、替換完成后的樣子是什么?格式如何

正則表達式是定義搜索模式的一串字符。

正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配?梢酝ㄟ^在一對分隔符之間放入表達式模式的各種組件來構造一個正則表達式,即/expression/普通字符由所有那些未顯式指定為元字符的打印

正則表達式主要用在如下場景: 輸入驗證 查找替換操作 高級字符串操作 文件搜索或重命名 白名單和黑名單

正則表達式不太適合用在這些場景: XML 或 HTML 解析 完全匹配的日期

有許多實現正則匹配的引擎,每種都有自己的特性。這本書將避免討論(不同引擎之間的)特性差異,而是只討論在大多數情況下不同引擎都共有的特征。

整本書中的示例使用JavaScript。因此,這本書可能會稍微偏向 JavaScript 的正則引擎。

2 基礎

正則表達式通常格式化為 /<rules>/<flags>,通常為了簡潔而省略后面的 /<flags>。關于 flag 我們將在下一章詳細討論。

讓我們從/p/g 這個正則表達式開始,F在,請將 /g flag 視為固定不變的。 /p/g

如我們所見,/p/g 匹配所有小寫的 p 字符。

注意

默認情況下,正則表達式區分大小寫。

在輸入字符串中找到的正則表達式模式的實例稱為“匹配”。 /pp/g

3 字符組

可以從一組字符中匹配一個字符。 /[aeiou]/g

[aeiou]/g 匹配輸入字符串中的所有元音。

下面是另一個例子: /p[aeiou]t/g

我們匹配一個 p,后跟一個元音,然后是一個 t。

有一個更直觀的快捷方式,可以在一個連續的范圍內匹配一個字符。 /[a-z]/g

警告

表達式 /[a-z]/g 只匹配一個字符。在上面的示例中,每個字符都有一個單獨的匹配項。不是整個字符串匹配。

我們也可以在正則表達式中組合范圍和單個字符。 /[A-Za-z0-9_-]/g

我們的正則表達式 /[A-Za-z0-9_-]/g 匹配一個字符,該字符必須(至少)是以下字符之一: A-Z a-z 0-9 _ 或者 -

我們也可以“否定”這些規則: /[^aeiou]/g

/[aeiou]/g/[^aeiou]/g 之間的唯一區別是 ^ 緊跟在左括號之后。其目的是"否定"括號中定義的規則。它表示的意思是:

匹配任何不屬于a、e、i、o和 u 的字符

3.1 例子

非法的用戶名字符 /[^a-zA-Z_0-9-]/g

指定字符

/[A-HJ-NP-Za-kmnp-z2-9]/g

4 字符轉義

字符轉義是對某些通用字符類的簡略表達方式。

4.1 數字字符 \d

轉義符 \d 表示匹配數字字符 0-9。等同于 [0-9]。 /\d/g (這里請仔細看)

/\d\d/g

\D\d 的反面,相當于[^0-9]。 /\D/g

4.2 單詞字符 \w

轉義符 \w 匹配單詞字符。包括: 小寫字母 a-z 大寫字母 A-Z 數字 0-9 下劃線 _

等價于 [a-zA-Z0-9_] /\w/g

/\W/g

4.3 空白字符 \s

轉義符 \s匹配空白字符。具體匹配的字符集取決于正則表達式引擎,但大多數至少包括: 空格 tab 制表符 \t 回車 \r 換行符 \n 換頁 \f

其他還可能包括垂直制表符(\v)。Unicode自識別引擎通常匹配分隔符類別中的所有字符。然而,技術細節通常并不重要。 /\s/g

/\S/g (大寫 s)

4.4 任意字符 .

雖然不是典型的字符轉義。. 可以匹配任意1個字符。(除換行符 \n 以外,通過 dotall 修飾符,也可以匹配換行符 \n) /./g

5 轉義

在正則表達式中,有些字符有特殊的含義,我們將在這一章中進行探討: | {,} (,) [,] ^, $ +, *, ? \ . 只在字符類中的字面量。 - : 有時是字符類中的特殊字符。

當我們想通過字面意思匹配這些字符時,我們可以再這些字符前面加 \ “轉義”它們。

/\(paren\)/g

/(paren)/g

/example\.com/g

/example.com/g

/A\+/g

/A+/g

/worth \$5/g

/worth $5/g

5.1 例子

JavaScript 內聯注釋 /\/\/.*

星號包圍的子串 /*[^\*]*\*

第一個和最后一個星號是字面上的,所有他們要用 \* 轉義。字符集里面的星號不需要被轉義,但為了清楚起見,我還是轉義了它。緊跟在字符集后面的星號表示字符集的重復,我們將在后面的章節中對此進行探討。

6 組

顧名思義,組是用來“組合”正則表達式的組件的。這些組可用于: 提取匹配的子集 重復分組任意次數 參考先前匹配的子字符串 增強可讀性 允許復雜的替換

這一章我們先學組如何工作,之后的章節還會有更多例子。

6.1 捕獲組

捕獲組用(…)表示。下面是一個解釋性的例子: /a(bcd)e/g

捕獲組允許提取部分匹配項。 /\{([^{}]*)\}/g

通過語言的正則函數,您將能夠提取括號之間匹配的文本。

捕獲組還可以用于對正則表達式進行部分分組,以便于重復。雖然我們將在接下來的章節中詳細介紹重復,但這里有一個示例演示了組的實用性。 /a(bcd)+e/g

其他時候,它們用于對正則表達式的邏輯相似部分進行分組,以提高可讀性。 /(\d\d\d\d)-W(\d\d)/g

6.2 回溯

回溯允許引用之前捕獲的子字符串。

匹配第一組可以使用 \1,匹配第二組可以使用 \2,依此類推… /([abc])×\1×\1/g

不能使用回溯來減少正則表達式中的重復。它們指的是組的匹配,而不是模式。 /[abc][abc][abc]/g

/[abc]\1\1/g

下面是一個演示常見用例的示例: /\w+([,|])\w+\1\w+/g

這不能通過重復的字符類來實現。 /\w+[,|]\w+[,|]\w+/g

6.3 非捕獲組

非捕獲組與捕獲組非常相似,只是它們不創建“捕獲”。而是采取形式 (?: ...)

非捕獲組通常與捕獲組一起使用。也許您正在嘗試使用捕獲組提取匹配的某些部分。而你可能希望使用一個組而不擾亂捕獲順序,這時候你應該使用非捕獲組。

6.4 例子

查詢字符串參數 /^\?(\w+)=(\w+)(?:&(\w+)=(\w+))*$/g

我們單獨匹配第一組鍵值對,因為這可以讓我么使用 & 分隔符, 作為重復組的一部分。

(基礎的) HTML 標簽

根據經驗,不要使用正則表達式來匹配 XML/HTML。不過,我還是提供相關的一個例子: /<([a-z]+)+>(.*)<\/\1>/gi

姓名

查找:\b(\w+) (\w+)\b

替換:

在替換操作,經常使用 2;捕獲使用 \1, \2

替換之前

John Doe

Jane Doe

Sven Svensson

Janez Novak

Janez Kranjski

Tim Joe

替換之后

Doe, John

Doe, Jane

Svensson, Sven

Novak, Janez

Kranjski, Janez

Joe, Tim

回溯和復數

查找: \bword(s?)\b

替換: phrase$1

替換之前

This is a paragraph with some words.

Some instances of the word "word" are in their plural form: "words".

替換之后

This is a paragraph with some phrases.

Yet, some are in their singular form: "phrase".

7 重復

重復是一個強大而普遍的正則表達式特性。在正則表達式中有幾種表示重復的方法。

7.1 可選項

我們可以使用 ?將某一部分設置成可選的(0或者1次)。 /a?/g

另一個例子: /https?/g

我們還可以讓捕獲組和非捕獲組編程可選的。 /url: (www\.)?example\.com/g

7.2 零次或者多次

如果我們希望匹配零個或多個標記,可以用 * 作為后綴。 /a*/g

我們的正則表達式甚至匹配一個空字符串。

7.3 一次或者多次

如果我們希望匹配 1 個或多個標記,可以用 + 作為后綴。 /a+/g

7.4 精確的 x 次

如果我們希望匹配特定的標記正好x次,我們可以添加{x}后綴。這在功能上等同于復制粘貼該標記 x 次。 /a{3}/g

下面是匹配大寫的六個字符的十六進制顏色代碼的例子。 /#[0-9A-F]{6}/g

這里,標記 {6} 應用于字符集 [0-9A-F]。

7.5 最小次和最大次之間

如果我們希望在最小次和最大次之間匹配一個特定標記,可以在這個標記后添加 {min,max}。 /a{2,4}/g

警告

{min,max} 中逗號后面不要有空格。

7.6 最少 x 次

如果我們希望匹配一個特定的標記最少 x 次,可以在標記后添加 {x,}。 和 {min, max} 類似,只是沒有上限了。 /a{2,}/g

7.7 貪婪模式的注意事項

正則表達式默認使用貪婪模式。在貪婪模式下,會盡可能多的匹配符合要求的字符。 /a*/g

/".*"/g

在**重復操作符(?,*,+,...)**后面添加 ?,可以讓匹配變“懶”。 /".*?"/g

在這里,這也可以通過使用[^"]代替。(這是最好的做法)。 /"[^"]*"/g

懶惰,意味著只要條件滿足,就立即停止;但貪婪意味著只有條件不再滿足才停止。

-Andrew S on StackOverflow

/<.+>/g

/<.+?>/g

7.8 例子

比特幣地址 /([13][a-km-zA-HJ-NP-Z0-9]{26,33})/g (思考: {26,33}?呢)

Youtube 視頻 /(?:https?:\/\/)?(?:www\.)?youtube\.com\/watch\?.*?v=([^&\s]+).*/gm

我們可以使用錨點調整表達式不讓它匹配最后一個不正確的鏈接,之后我們會接觸到。

8 交替

交替允許匹配幾個短語中的一個。這比僅限于單個字符的字符組更加強大。

使用管道符號 | 把多個短語之間分開 /foo|bar|baz/g

匹配 foo, bar, 和 baz 中的一個。

如果正則中只有一部分需要“交替”,可以使用組進行包裹,捕獲組和非捕獲組都可以。 /Try (foo|bar|baz)/g

Try 后面跟著 foo, bar, 和 baz 中的一個。

匹配 100-250 中間的數字: /1\d\d|2[0-4]\d|250/g

這個可以使用 Regex Numeric Range Generator 工具生成。

例子

十六進制顏色

讓我們改進一下之前十六進制顏色匹配的例子。 /#[0-9A-F]{6}|[0-9A-F]{3}

[0-9A-F]{6} 要放在[0-9A-F]{3}的前面,這一點非常重要。否則: /#([0-9A-F]{3}|[0-9A-F]{6})/g

小提示

正則表達式引擎是從左邊到右邊的嘗試交替的。

羅馬數字 /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/g

9 修飾符

修飾符允許我們把正則表達式分成不同的 "模式"。

修飾符是 /pattern/ 后面的部分。

不同引擎支持不同的修飾符。在這里我們只討論最常見修飾符。

9.1 全局修飾符(g)

到現在為止,所有的例子都設置了全局修飾符。如果不啟用全局修飾符,正則表達式匹配第一個以后將不再匹配其他任何字符。 /[aeiou]/g

/[aeiou]/

9.2 不區分大小寫修飾符(i)

顧名思義,啟用這個修飾符會使正則在匹配時不區分大小寫。 /#[0-9A-F]{6}/i

/#[0-9A-F]{6}/

/#[0-9A-Fa-f]{6}/

9.3 多行模式修飾符(m)

有限支持

在 Ruby 中,m 修飾符是執行其他的函數。

多行修飾符與正在在處理包含換行符的“多行”字符串時對錨點的處理有關。默認情況下,/^foo$/只匹配 “foo”。

我們可能希望它在多行字符串中的一行也能匹配 foo。

我們拿 "bar\nfoo\nbaz" 舉例子:

bar foo baz

如果沒有 m 修飾符,上面的字符串會被當做單行 bar\nfoo\nbaz, 正則表達式 ^foo$ 匹配不到任何字符。

如果有 m 修飾符,上面的字符串會被當做 3 行。 ^foo$ 可以匹配到中間那一行。

9.4 Dot-all修飾符 (s)

有限支持

ES2018 之前的 JavaScript 不支持這個修飾符。 Ruby 也不支持這個修飾,而是用 m 表示。

.通常匹配除換行符以外的任何字符。使用dot all修飾符后,它也可以匹配換行符。

10 錨點

錨點本身不匹配任何東西。但是,他們會限制匹配出現的位置。

你可以把錨點當做是 "不可見的字符"。

10.1 行首 ^

在正則開始時插入^ 號,使正則其余部分必須從字符串開始的地方匹配。你可以把它當成始終要在字符串開頭匹配一個不可見的字符。 /^p/g

10.2 行尾

在正則結尾時插入$ 號, 類似于行首符。你可以把它當成始終要在字符串結尾匹配一個不可見的字符。 /p$/g

^$錨點經常一起使用,以確保正則和字符串整個匹配,而不僅僅是部分匹配。 /^p$/g

讓我們回顧一下重復中的一個例子,并在正則的末尾添加兩個錨點。 /^https?$/g

如果沒有這 2 個錨點, http/2shttp 也會被匹配。

10.3 字邊界 \b

字邊界是一個字符和非詞字符之間的位置。

字邊界錨點 \b,匹配字符和非詞字符之間存在的假想不可見字符。 /\bp/g

提示

字符包括 a-z, A-Z, 0-9, 和_.

/\bp\b/g

/\bcat\b/g

還有一個非字邊界錨 \B。

顧名思義,它匹配除字邊界之外的所有內容。 /\Bp/g

/\Bp\B/g

小提示

^…$\b…\b是常見的模式,您幾乎總是需要這 2 個防止意外匹配。

10.4 例子

尾部空格 /\s+$/gm

markdown 標題 /^## /gm

沒有錨點: /## /gm

11 零寬斷言(lookaround)

零寬斷言可用于驗證條件,而不匹配任何文本。

你只能看,不能動。

先行斷言(lookhead) 正向(?=…) 負向(?!…) 先行斷言(lookbehind) 正向(?<=…) 負向(?<!…)

11.1 先行斷言(lookhead)

正向(positive) /_(?=[aeiou])/g

注意后面的字符是如何不匹配的?梢酝ㄟ^正面前看得到證實。 /(.+)_(?=[aeiou])(?=\1)/g

正則引擎在 _ 使用了 (?=[aeiou])(?=\1) 進行檢查。 /(?=.*#).*/g

負向(Negative) /_(?![aeiou])/g

/^(?!.*#).*$/g

如果沒有錨點,將匹配每個示例中沒有#的部分。

負向的先行斷言常常用于防止匹配特定短語。 /foo(?!bar)/g

/---(?:(?!---).)*---/g

11.2 例子

密碼驗證

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[a-zA-Z]).{8,}$/

零寬斷言可用于驗證多個條件。

帶引號的字符串 /(['"])(?:(?!\1).)*\1/g

如果沒有先行斷言,我們最多只能做到這樣: /(['"])[^'"]*\1/g

12 進階例子

JavaScript 注釋 /\/\*[\s\S]*?\*\/|\/\/.*/g

[\s\S]是一種匹配任何字符(包括換行符)的技巧。我們避免使用dot-all 修飾符,因為我們需要使用. 表示單行注釋。

24小時時間 /^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$/g

IP 地址 /\b(?:(?:2(?:[0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9])\.){3}(?:(?:2([0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9]))\b/g

元標簽 /<Example source="(.*?)" flags="(.*?)">/gm

替換: <Example regex={/$1/$2}>

浮點數

可選符號

可選整數部分

可選小數部分

可選指數部分

/^([+-]?(?=\.\d|\d)(?:\d+)?(?:\.?\d*))(?:[eE]([+-]?\d+))?$/g

正向的先行斷言 (?=\.\d|\d) 確保不會匹配 ..

HSL顏色

從0到360的整數 /^0*(?:360|3[0-5]\d|[12]?\d?\d)$/g

百分比 /^(?:100(?:\.0+)?|\d?\d(?:\.\d+)?)%$/g

HSL 和 百分比 /^hsl\(\s*0*(?:360|3[0-5]\d|[12]?\d?\d)\s*(?:,\s*0*(?:100(?:\.0+)?|\d?\d(?:\.\d+)?)%\s*){2}\)$/gi

13 下一步

如果你像進一步學習正則表達式及其工作原理: awesome-regex regex tag on StackOverflow StackOverflow RegEx FAQ r/regex RexEgg Regular-Expressions.info Regex Crossword Regex Golf

謝謝閱讀!添加微信:手邊字節

驗證身份證號碼的正確正則表達式/(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/function isCardNo(card){身份證號碼為15位或者18位,15位時全為數字,18位前17位為數字,最后一位是校驗位,可能為數字或字符Xvar reg=(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/;if(reg.test(card)=false){alert("身份證輸入不合法");return false;}}擴展資料:正則表達式的書寫語法1、^表示匹配字符串的開始位置(例外 用在中括號中[]時,可以理解為取反,表示不匹配括號中字符串)2、$表示匹配字符串的結束位置3、*表示匹配 零次到多次4、+表示匹配 一次到多次(至少e69da5e6ba90e799bee5baa631333431353262有一次)5、?表示匹配零次或一次6、.表示匹配單個字符7、|表示為或者,兩項中取一項8、()小括號表示匹配括號中全部字符9、[]中括號表示匹配括號中一個字符 范圍描述 如[0-9 a-z A-Z]10、{ } 大括號用于限定匹配次數 如 {n}表示匹配n個字符 {n,}表示至少匹配n個字符 {n,m}表示至少n,最多m11、\\ 轉義字符 如上基本符號匹配都需要轉義字符 如 \\*表示匹配*號12、\\w 表示英文字母和數字 \\W 非字母和數字13、\\d 表示數字 \\D 非數字參考鏈接來源:百度百科-正則表達式內容來自www.anxorj.tw請勿采集。


  • 本文相關:
  • jquery正則表達式的使用方法步驟詳解
  • 正則表達式不包含align該怎么寫
  • java中使用正則表達式處理文本數據
  • js通過正則匹配沒有內容的空標簽
  • 詳解js正則表達式語法介紹
  • python 正則表達式獲取字符串中所有的日期和時間
  • 左右若干數字驗證的正則表達式
  • 正則表達式語句中的注釋方法分享
  • 最新手機號碼、電話號碼正則表達式
  • shell腳本之正則表達式、grep、sed、awk
  • 驗證身份證號碼的正確正則表達式
  • python 正則表達式,怎樣匹配以某個字符串開頭,以某個字符串結尾的情況?
  • 求高人按步驟詳細的揭開這個正則表達式
  • js正則表達式的郵編這么寫誰能解釋一下? [1-9]d{5}(?!d) 前面的[1-9]
  • 輸入密碼至少要6位,如果用正則表達式來判斷,應該怎么寫?
  • M?像這樣的數字下標怎么用正則表達式匹配上
  • 關于Java里面的正則表達式..
  • 文檔編輯器的正則表達式替換。如何將一個ABC格式的列表替換為ABCABC格式。
  • 怎樣獲取正則表達式匹配字符串的一部分
  • 正則表達式支持庫 怎么用
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全javascriptasp.netphp編程ajax相關正則表達式asp編程jsp編程編程10000問css/htmlflex腳本加解密web2.0xml/rss網頁編輯器相關技巧安全相關網頁播放器其它綜合dart首頁正則表達式jquery正則表達式的使用方法步驟詳解正則表達式不包含align該怎么寫java中使用正則表達式處理文本數據js通過正則匹配沒有內容的空標簽詳解js正則表達式語法介紹python 正則表達式獲取字符串中所有的日期和時間左右若干數字驗證的正則表達式正則表達式語句中的注釋方法分享最新手機號碼、電話號碼正則表達式shell腳本之正則表達式、grep、sed、awkjava 正則表達式詳解比較正宗的驗證郵箱的正則表達式正則表達式匹配任意字符(包括換最新手機號碼、電話號碼正則表達javascript 手機號碼正則表達式驗js利用正則配合replace替換指定字正則表達式匹配不包含某些字符串正則中需要轉義的特殊字符小結js正則函數match、exec、test、s最全的常用正則表達式大全——包php正則表達式抓取某個標簽的特定屬性值的正則表達式{n,m}量詞(至少n次,最多m次)正則表達式實現手機號中間4位數隱藏或者只將 html 轉成 ubb代碼的小腳本淺談正則表達式中的分組和引用實現方法正則表達式之全部符號對照表用js讓文章內容指定的關鍵字加亮詳解php正則表達式替換實現(php preg_replinux正則表達式awk詳解php下ereg實現匹配ip的正則
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.anxorj.tw All Rights Reserved
    陕西快乐10分下载