什麼是正規表示式?
#正規表示式是一組由字母和符號組成的特殊文字, 它可以用來從文字中找出滿足你想要的格式的句子.
一個正則表達式是在一個主體字串中從左到右匹配字串時的一種樣式. "Regular expression"這個字比較拗口, 我們常使用縮寫的術語"regex"或"regexp". 正規表示式可以從一個基礎字串中根據一定的匹配模式替換文本中的字符串、驗證表單、提取字符串等等.
想像你正在寫一個應用, 然後你想設定一個使用者命名的規則, 讓使用者名稱包含字元,數字,底線和連字號,以及限製字元的數,好讓名字看起來沒那麼醜. 我們使用以下正規表示式來驗證一個使用者名稱:
以上的正規表示式可以接受john_doe
, jo-hn_doe
, john12_as
.
但不符合Jo
, 因為它包含了大寫的字母而且太短了.
#目錄
# 1 * 號2.3.2 號2.3.3 ? 號## #」 ##2.7 轉碼特殊字元
#2.8.2 $ 號3. 簡寫字元集4. 零寬度斷言(前後預查)4.1 ?=... 正先行斷言4.2 ?!... 負先行斷言# #5.標誌
#1. 基本符合
正規表示式其實就是在執行搜尋時的格式, 它是由一些字母和數字組合而成.
例如: 一個正規表示式
the
"the" => The fat cat sat on the mat.
正規表示式123
符合字串123
. 它逐個字元的與輸入的正規表示式做比較.
正則表達式是大小寫敏感的, 所以The
不會匹配the
.
"the" => The fat cat sat on the mat.
2. 元字元
正規表示式主要依賴於元字元. 元字符不代表他們本身的字面意思, 他們都有特殊的含義. 一些元字符寫在方括號中的時候有一些特殊的意思. 以下是一些元字符的介紹:
元字元 | 描述 |
---|---|
#. | 句號符合任意單一字元除了換行符號. |
[ ] | 字元種類. 匹配方括號內的任意字元. |
否定的字元種類. 符合除了方括號裡的任意字元 | |
符合>=0個重複的在*號之前的字元. | |
符合>=1個重複的號碼前面的字元. | |
#標記?之前的字元為可選. | |
匹配num個大括號之前的字元(n | |
字元集, 符合與xyz 完全相等的字串. | |
或運算子,匹配符號前後的字元. | |
# 轉義字元,用於匹配一些保留的字元 | [ ] ( ) { } . * ? ^ $ \ |
|
#從開始行開始符合. | |
從末端開始符合. |
简写 | 描述 |
---|---|
. | 除换行符外的所有字符 |
\w | 匹配所有字母数字, 等同于 [a-zA-Z0-9_]
|
\W | 匹配所有非字母数字, 即符号, 等同于: [^\w]
|
\d | 匹配数字: [0-9]
|
\D | 匹配非数字: [^\d]
|
\s | 匹配所有空格字符, 等同于: [\t\n\f\r\p{Z}]
|
\S | 匹配所有非空格字符: [^\s]
|
\f | 匹配一个换页符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\t | 匹配一个制表符 |
\v | 匹配一个垂直制表符 |
\p | 匹配 CR/LF (等同于 \r\n ),用来匹配 DOS 行终止符 |
4. 零宽度断言(前后预查)
先行断言和后发断言都属于非捕获簇(不捕获文本 ,也不针对组合计进行计数). 先行断言用于判断所匹配的格式是否在另一个确定的格式之前, 匹配结果不包含该确定格式(仅作为约束).
例如, 我们想要获得所有跟在 $
符号后的数字, 我们可以使用正后发断言 (?.
这个表达式匹配 <code>$
开头, 之后跟着 0,1,2,3,4,5,6,7,8,9,.
这些字符可以出现大于等于 0 次.
零宽度断言如下:
符号 | 描述 |
---|---|
?= | 正先行断言-存在 |
?! | 负先行断言-排除 |
? | 正后发断言-存在 |
? | 负后发断言-排除 |
?=...
正先行断言
4.1 ?=...
正先行断言, 表示第一部分表达式之后必须跟着 ?=...
定义的表达式.
返回结果只包含满足匹配条件的第一部分表达式.
定义一个正先行断言要使用 ()
. 在括号内部使用一个问号和等号: (?=...)
.
正先行断言的内容写在括号中的等号后面.
例如, 表达式 (T|t)he(?=\sfat)
匹配 The
和 the
, 在括号中我们又定义了正先行断言 (?=\sfat)
,即 The
和 the
后面紧跟着 (空格)fat
.
"(T|t)he(?=\sfat)" => The fat cat sat on the mat.
?!...
负先行断言
4.2 负先行断言 ?!
用于筛选所有匹配结果, 筛选条件为 其后不跟随着断言中定义的格式.正先行断言
定义和 负先行断言
一样, 区别就是 =
替换成 !
也就是 (?!...)
.
表达式 (T|t)he(?!\sfat)
匹配 The
和 the
, 且其后不跟着 (空格)fat
.
"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
? 正后发断言
4.3 正后发断言 记作(? 用于筛选所有匹配结果, 筛选条件为 其前跟随着断言中定义的格式.
例如, 表达式 <code>(? 匹配 <code>fat
和 mat
, 且其前跟着 The
或 the
.
"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
? 负后发断言
4.4 负后发断言 记作 (? 用于筛选所有匹配结果, 筛选条件为 其前不跟随着断言中定义的格式.
例如, 表达式 <code>(? 匹配 <code>cat
, 且其前不跟着 The
或 the
.
"(?<!(T|t)he\s)(cat)" => The cat sat on cat.
5. 標誌
標誌也叫模式修正子, 因為它可以用來修改表達式的搜尋結果. 這些標誌可以任意的組合使用, 它也是整個正規表示式的一部分.
#標誌 | ##描述|
---|---|
忽略大小寫. | |
全域搜尋. | |
多行的: 錨點元字元 | ^ $# 工作範圍在每行的起始.
|

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

WebStorm Mac版
好用的JavaScript開發工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。