1. 程式人生 > >Java學習筆記之Pattern類的用法詳解 (正則表示式)

Java學習筆記之Pattern類的用法詳解 (正則表示式)

Implements: Serializable

正則表示式的編譯表示形式。

指定為字串的正則表示式必須首先被編譯為此類的例項。然後,可將得到的模式用於建立 Matcher 物件,依照正則表示式,該物件可以與任意字元序列匹配。執行匹配所涉及的所有狀態都駐留在匹配器中,所以多個匹配器可以共享同一模式。

因此,典型的呼叫順序是

  Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches();

在僅使用一次正則表示式時,可以方便地通過此類定義 matches

方法。此方法編譯表示式並在單個呼叫中將輸入序列與其匹配。語句

  boolean b = Pattern.matches("a*b", "aaaaab");

等效於上面的三個語句,儘管對於重複的匹配而言它效率不高,因為它不允許重用已編譯的模式。

此類的例項是不可變的,可供多個併發執行緒安全使用。Matcher 類的例項用於此目的則不安全。

正則表示式的構造摘要

的非捕獲組

構造 匹配
字元
x 字元 x
// 反斜線字元
/0n 帶有八進位制值 0 的字元 n (0 <= n <= 7)
/0nn 帶有八進位制值 0 的字元 nn (0 <= n
 <= 7)
/0mnn 帶有八進位制值 0 的字元 mnn(0 <= m <= 3、0 <= n <= 7)
/xhh 帶有十六進位制值 0x 的字元 hh
/uhhhh 帶有十六進位制值 0x 的字元 hhhh
/t 製表符 ('/u0009')
/n 新行(換行)符 ('/u000A')
/r 回車符 ('/u000D')
/f 換頁符 ('/u000C')
/a 報警 (bell) 符 ('/u0007')
/e 轉義符 ('/u001B')
/cx 對應於 x 的控制符
字元類
[abc] a、b 或 c(簡單類)
[^abc] 任何字元,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(範圍)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](並集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](減去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](減去)
預定義字元類
. 任何字元(與行結束符可能匹配也可能不匹配)
/d 數字:[0-9]
/D 非數字: [^0-9]
/s 空白字元:[ /t/n/x0B/f/r]
/S 非空白字元:[^/s]
/w 單詞字元:[a-zA-Z_0-9]
/W 非單詞字元:[^/w]
POSIX 字元類(僅 US-ASCII)
/p{Lower} 小寫字母字元:[a-z]
/p{Upper} 大寫字母字元:[A-Z]
/p{ASCII} 所有 ASCII:[/x00-/x7F]
/p{Alpha} 字母字元:[/p{Lower}/p{Upper}]
/p{Digit} 十進位制數字:[0-9]
/p{Alnum} 字母數字字元:[/p{Alpha}/p{Digit}]
/p{Punct} 標點符號:!"#$%&'()*+,-./:;<=>[email protected][/]^_`{|}~
/p{Graph} 可見字元:[/p{Alnum}/p{Punct}]
/p{Print} 可列印字元:[/p{Graph}/x20]
/p{Blank} 空格或製表符:[ /t]
/p{Cntrl} 控制字元:[/x00-/x1F/x7F]
/p{XDigit} 十六進位制數字:[0-9a-fA-F]
/p{Space} 空白字元:[ /t/n/x0B/f/r]
java.lang.Character 類(簡單的 java 字元型別)
/p{javaLowerCase} 等效於 java.lang.Character.isLowerCase()
/p{javaUpperCase} 等效於 java.lang.Character.isUpperCase()
/p{javaWhitespace} 等效於 java.lang.Character.isWhitespace()
/p{javaMirrored} 等效於 java.lang.Character.isMirrored()
Unicode 塊和類別的類
/p{InGreek} Greek 塊(簡單塊)中的字元
/p{Lu} 大寫字母(簡單類別)
/p{Sc} 貨幣符號
/P{InGreek} 所有字元,Greek 塊中的除外(否定)
[/p{L}&&[^/p{Lu}]]  所有字母,大寫字母除外(減去)
邊界匹配器
^ 行的開頭
$ 行的結尾
/b 單詞邊界
/B 非單詞邊界
/A 輸入的開頭
/G 上一個匹配的結尾
/Z 輸入的結尾,僅用於最後的結束符(如果有的話)
/z 輸入的結尾
Greedy 數量詞
X? X,一次或一次也沒有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超過 m 次
Reluctant 數量詞
X?? X,一次或一次也沒有
X*? X,零次或多次
X+? X,一次或多次
X{n}? X,恰好 n 次
X{n,}? X,至少 n 次
X{n,m}? X,至少 n 次,但是不超過 m 次
Possessive 數量詞
X?+ X,一次或一次也沒有
X*+ X,零次或多次
X++ X,一次或多次
X{n}+ X,恰好 n 次
X{n,}+ X,至少 n 次
X{n,m}+ X,至少 n 次,但是不超過 m 次
Logical 運算子
XY X 後跟 Y
X|Y X 或 Y
(X) X,作為捕獲組
Back 引用
/n 任何匹配的 nth 捕獲組
引用
/ Nothing,但是引用以下字元
/Q Nothing,但是引用所有字元,直到 /E
/E Nothing,但是結束從 /Q 開始的引用
特殊構造(非捕獲)
(?:X) X,作為非捕獲組
(?idmsux-idmsux)  Nothing,但是將匹配標誌i d m s u x on - off
(?idmsux-idmsux:X)   X,作為帶有給定標誌 i d m s u x on - off
(?=X) X,通過零寬度的正 lookahead
(?!X) X,通過零寬度的負 lookahead
(?<=X) X,通過零寬度的正 lookbehind
(?<!X) X,通過零寬度的負 lookbehind
(?>X) X,作為獨立的非捕獲組

反斜線、轉義和引用

反斜線字元 ('/') 用於引用轉義構造,如上表所定義的,同時還用於引用其他將被解釋為非轉義構造的字元。因此,表示式 // 與單個反斜線匹配,而 /{與左括號匹配。

在不表示轉義構造的任何字母字元前使用反斜線都是錯誤的;它們是為將來擴充套件正則表示式語言保留的。可以在非字母字元前使用反斜線,不管該字元是否非轉義構造的一部分。

根據 Java Language Specification 的要求,Java 原始碼的字串中的反斜線被解釋為 Unicode 轉義或其他字元轉義。因此必須在字串字面值中使用兩個反斜線,表示正則表示式受到保護,不被 Java 位元組碼編譯器解釋。例如,當解釋為正則表示式時,字串字面值 "/b" 與單個退格字元匹配,而 "//b" 與單詞邊界匹配。字串字面值 "/(hello/)" 是非法的,將導致編譯時錯誤;要與字串 (hello) 匹配,必須使用字串字面值 "//(hello//)"。

字元類

字元類可以出現在其他字元類中,並且可以包含並集運算子(隱式)和交集運算子 (&&)。並集運算子表示至少包含其某個運算元類中所有字元的類。交集運算子表示包含同時位於其兩個運算元類中所有字元的類。

字元類運算子的優先順序如下所示,按從最高到最低的順序排列:

1     字面值轉義     /x
2     分組 [...]
3     範圍 a-z
4     並集 [a-e][i-u]
5     交集 [a-z&&[aeiou]]

注意,元字元的不同集合實際上位於字元類的內部,而非字元類的外部。例如,正則表示式 . 在字元類內部就失去了其特殊意義,而表示式 - 變成了形成元字元的範圍。

行結束符

行結束符是一個或兩個字元的序列,標記輸入字元序列的行結尾。以下程式碼被識別為行結束符:

  • 新行(換行)符 ('/n')、
  • 後面緊跟新行符的回車符 ("/r/n")、
  • 單獨的回車符 ('/r')、
  • 下一行字元 ('/u0085')、
  • 行分隔符 ('/u2028') 或
  • 段落分隔符 ('/u2029)。

如果啟用 #UNIX_LINES模式,則新行符是唯一識別的行結束符。

如果未指定 #DOTALL 標誌,則正則表示式 .可以與任何字元(行結束符除外)匹配。

預設情況下,正則表示式 ^ 和 $ 忽略行結束符,僅分別與整個輸入序列的開頭和結尾匹配。如果啟用 #MULTILINE 模式,則 ^ 在輸入的開頭和行結束符之後(輸入的結尾)才發生匹配。處於 #MULTILINE模式中時,$ 僅在行結束符之前或輸入序列的結尾處匹配。

組和捕獲

捕獲組可以通過從左到右計算其開括號來編號。例如,在表示式 ((A)(B(C))) 中,存在四個這樣的組:

1     ((A)(B(C)))
2     /A
3     (B(C))
4     (C)

組零始終代表整個表示式。

之所以這樣命名捕獲組是因為在匹配中,儲存了與這些組匹配的輸入序列的每個子序列。捕獲的子序列稍後可以通過 Back 引用在表示式中使用,也可以在匹配操作完成後從匹配器獲取。

與組關聯的捕獲輸入始終是與組最近匹配的子序列。如果由於量化的緣故再次計算了組,則在第二次計算失敗時將保留其以前捕獲的值(如果有的話)例如,將字串 "aba" 與表示式 (a(b)?)+ 相匹配,會將第二組設定為 "b"。在每個匹配的開頭,所有捕獲的輸入都會被丟棄。

以 (?) 開頭的組是純的非捕獲組,它不捕獲文字,也不針對組合計進行計數。

Unicode 支援

此類符合 Unicode Technical Standard #18:Unicode Regular Expression Guidelines第 1 級和 RL2.1 Canonical Equivalents。

Java 原始碼中的 Unicode 轉義序列(如 /u2014)是按照 Java Language Specification 的 第 3.3 節中的描述處理的。這樣的轉義序列還可以由正則表示式解析器直接實現,以便在從檔案或鍵盤擊鍵讀取的表示式中使用 Unicode 轉義。因此,可以將不相等的字串 "/u2014" 和 "//u2014" 編譯為相同的模式,從而與帶有十六進位制值 0x2014 的字元匹配。

與 Perl 中一樣,Unicode 塊和類別是使用 /p 和 /P 構造編寫的。如果輸入具有屬性 prop,則與 /p{prop} 匹配,而輸入具有該屬性時與 /P{prop} 不匹配。塊使用字首 In 指定,與在 InMongolian 中一樣。可以使用可選字首 Is 指定類別:/p{L} 和 /p{IsL}都表示 Unicode 字母的類別。塊和類別在字元類的內部和外部都可以使用。

受支援的類別是由 Character 類指定版本中的 The Unicode Standard 的類別。類別名稱是在 Standard 中定義的,即標準又豐富。Pattern 所支援的塊名稱是 UnicodeBlock.forName 所接受和定義的有效塊名稱。

行為類似 java.lang.Character boolean 是 methodname 方法(廢棄的類別除外)的類別,可以通過相同的 /p{prop} 語法來提供,其中指定的屬性具有名稱 javamethodname

與 Perl 5 相比較

Pattern引擎用有序替換項執行傳統上基於 NFA 的匹配,與 Perl 5 中進行的相同。

此類不支援 Perl 構造:

  • 條件構造 (?{X}) 和 (?(condition)X|Y)、

  • 嵌入式程式碼構造 (?{code}) 和 (??{code})、

  • 嵌入式註釋語法 (?#comment) 和

  • 預處理操作 /l /u、/L 和 /U。

此類支援但 Perl 不支援的構造:

  • Possessive 數量詞,它可以儘可能多地進行匹配,即使這樣做導致所有匹配都成功時也如此。

  • 字元類並集和交集,如上文所述。

與 Perl 的顯著不同點是:

  • 在 Perl 中,/1 到 /9 始終被解釋為 Back 引用;如果至少存在多個子表示式,則大於 9 的反斜線轉義數按 Back 引用對待,否則在可能的情況下,它將被解釋為八進位制轉義。在此類中,八進位制轉義必須始終以零開頭。在此類中,/1 到 /9 始終被解釋為 Back 引用,較大的數被接受為 Back 引用,如果在正則表示式中至少存在多個子表示式的話;否則,解析器將刪除數字,直到該數小於等於組的現有數或者其為一個數字。

  • Perl 使用 g 標誌請求恢復最後匹配丟失的匹配。此功能是由 Matcher 類顯式提供的:重複執行 find 方法呼叫可以恢復丟失的最後匹配,除非匹配器被重置。

  • 在 Perl 中,位於表示式頂級的嵌入式標記對整個表示式都有影響。在此類中,嵌入式標誌始終在它們出現的時候才起作用,不管它們位於頂級還是組中;在後一種情況下,與在 Perl 中類似,標誌在組的結尾處還原。

  • Perl 允許錯誤匹配構造,如在表示式 *a 中,以及不匹配的括號,如在在表示式 abc] 中,並將其作為字面值對待。此類還接受不匹配的括號,但對 +、? 和 * 不匹配元字元有嚴格限制;如果遇到它們,則丟擲 PatternSyntaxException

有關正則表示式構造行為更準確的描述,請參見 Mastering Regular Expressions, 2nd Edition,該書由 Jeffrey E. F. Friedl、O'Reilly 和 Associates 合著,於 2002 年出版。

version 1.123, 06/06/28
since 1.4
spec JSR-51
See also split(String, int), split(String)
Fields
final public static int UNIX_LINES 啟用 Unix 行模式。

在此模式中,.、^ 和 $ 的行為中僅識別 '/n'行結束符。

通過嵌入式標誌表示式 (?d) 也可以啟用 Unix 行模式。

final public static int CASE_INSENSITIVE 啟用不區分大小寫的匹配。

預設情況下,不區分大小寫的匹配假定僅匹配 US-ASCII 字符集中的字元。可以通過指定 #UNICODE_CASE標誌連同此標誌來啟用 Unicode 感知的、不區分大小寫的匹配。

通過嵌入式標誌表示式  (?i)也可以啟用不區分大小寫的匹配。

指定此標誌可能對效能產生一些影響。

final public static int COMMENTS 模式中允許空白和註釋。

此模式將忽略空白和在結束行之前以 #開頭的嵌入式註釋。

通過嵌入式標誌表示式  (?x) 也可以啟用註釋模式。

final public static int MULTILINE 啟用多行模式。

在多行模式中,表示式 ^ 和 $僅分別在行結束符前後匹配,或者在輸入序列的結尾處匹配。預設情況下,這些表示式僅在整個輸入序列的開頭和結尾處匹配。

通過嵌入式標誌表示式 (?m) 也可以啟用多行模式。

final public static int LITERAL  啟用模式的字面值解析。

指定此標誌後,指定模式的輸入字串就會作為字面值字元序列來對待。輸入序列中的元字元或轉義序列不具有任何特殊意義。

標誌 CASE_INSENSITIVE 和 UNICODE_CASE 在與此標誌一起使用時將對匹配產生影響。其他標誌都變得多餘了。

不存在可以啟用字面值解析的嵌入式標誌字元。

since 1.5
final public static int DOTALL 啟用 dotall 模式。

在 dotall 模式中,表示式 .可以匹配任何字元,包括行結束符。預設情況下,此表示式不匹配行結束符。

通過嵌入式標誌表示式 (?s) 也可以啟用 dotall 模式(s 是 "single-line" 模式的助記符,在 Perl 中也使用它)。

final public static int UNICODE_CASE 啟用 Unicode 感知的大小寫摺疊。

指定此標誌後,由 #CASE_INSENSITIVE標誌啟用時,不區分大小寫的匹配將以符合 Unicode Standard 的方式完成。預設情況下,不區分大小寫的匹配假定僅匹配 US-ASCII 字符集中的字元。

通過嵌入式標誌表示式 (?u)也可以啟用 Unicode 感知的大小寫摺疊。

指定此標誌可能對效能產生影響。

final public static int CANON_EQ 啟用規範等價。

指定此標誌後,當且僅當其完整規範分解匹配時,兩個字元才可視為匹配。例如,當指定此標誌時,表示式 "a/u030A" 將與字串 "/u00E5"匹配。預設情況下,匹配不考慮採用規範等價。

不存在可以啟用規範等價的嵌入式標誌字元。

指定此標誌可能對效能產生影響。

Methods
public static Pattern compile(String regex)  將給定的正則表示式編譯到模式中。
regex 要編譯的表示式
Throws PatternSyntaxException:  如果表示式的語法無效
public static Pattern compile(String regex, int flags)  將給定的正則表示式編譯到具有給定標誌的模式中。
regex 要編譯的表示式
flags 匹配標誌,可能包括 #CASE_INSENSITIVE#MULTILINE#DOTALL#UNICODE_CASE、 #CANON_EQ#UNIX_LINES#LITERAL 和 #COMMENTS 的位掩碼
Throws IllegalArgumentException:  如果在 flags 中設定與定義的匹配標誌不對應的位值
Throws PatternSyntaxException:  如果表示式的語法無效
public int flags()  返回此模式的匹配標誌。
return 編譯此模式時指定的匹配標誌
public Matcher matcher(CharSequence input)  建立匹配給定輸入與此模式的匹配器。
input 要匹配的字元序列
return 此模式的新匹配器
public static boolean matches(String regex, CharSequence input)  編譯給定正則表示式並嘗試將給定輸入與其匹配。

呼叫此便捷方法的形式

 Pattern.matches(regex, input);

與表示式

 Pattern.compile(regex).matcher(input).matches() 

的行為完全相同。

如果要多次使用一種模式,編譯一次後重用此模式比每次都呼叫此方法效率更高。

regex 要編譯的表示式
input 要匹配的字元序列
Throws PatternSyntaxException:  如果表示式的語法無效
public String pattern()  返回在其中編譯過此模式的正則表示式。
return 模式的原始碼
public static String quote(String s)  返回指定 String 的字面值模式 String

此方法產生一個 String,可以將其用於建立與字串 s 匹配的 Pattern,就好像它是字面值模式一樣。

輸入序列中的元字元和轉義序列不具有任何特殊意義。
s 要字面值化的字串
return 字面值字串替換
since 1.5
public String[] split(CharSequence input, int limit)  圍繞此模式的匹配拆分給定輸入序列。

此方法返回的陣列包含輸入序列的子字串,由匹配此模式的另一子序列或輸入序列的結尾終止。陣列中子字串的順序與其在輸入中出現的順序相同。如果此模式與輸入的任何子序列都不匹配,那麼得到的陣列僅包含一個元素,即字串形式的輸入序列。

limit 引數控制應用模式的次數,從而影響結果陣列的長度。如果限制 n 大於零,那麼模式至多應用 n> - 1 次,陣列的長度不大於 n,並且陣列的最後條目將包含除最後的匹配定界符之外的所有輸入。如果 n 非正,那麼將應用模式的次數不受限制,並且陣列可以為任意長度。如果 n為零,那麼應用模式的次數不受限制,陣列可以為任意長度,並且將丟棄尾部空字串。

例如,輸入 "boo:and:foo"將產生以下結果及引數:

Regex    

Limit    

Result    

: 2 { "boo", "and:foo" }
: 5 { "boo", "and", "foo" }
: -2 { "boo", "and", "foo" }
o 5 { "b", "", ":and:f", "", "" }
o -2 { "b", "", ":and:f", "", "" }
o 0 { "b", "", ":and:f" }
input 要拆分的字元序列
limit 結果閾值,如上文中所述
return 根據圍繞此模式的匹配來拆分輸入後所計算的字串陣列
public String[] split(CharSequence input)  圍繞此模式的匹配拆分給定輸入序列。

此方法的工作方式類似於使用給定的輸入序列和限制引數零呼叫兩引數 (java.lang.CharSequence, int) split} 方法。因此,得到的陣列中不包括尾部空字串。

例如,輸入 "boo:and:foo"將產生以下結果及表示式:

Regex    

Result

: { "boo", "and", "foo" }
o { "b", "", ":and:f" }
input 要拆分的字元序列
return 根據圍繞此模式的匹配來拆分輸入後所計算的字串陣列
public String toString() 

返回此模式的字串表示形式。此為在其中編譯過此模式的正則表示式。

return 模式的字串表示形式
since 1.5

相關推薦

Java學習筆記Pattern用法 (表示式)

Implements: Serializable 正則表示式的編譯表示形式。 指定為字串的正則表示式必須首先被編譯為此類的例項。然後,可將得到的模式用於建立 Matcher 物件,依照正則表示式,該物件可以與任意字元序列匹配。執行匹配所涉及的所有狀態都駐留在匹配器中,

linux學習筆記shell程式設計(一)表示式與字元處理

shell程式設計 基礎正則表示式 正則和萬用字元的區別:正則是包含匹配,匹配檔案內容,grep,awk等支援正則表示式。萬用字元是完全匹配,匹配檔名,例如find,ls不認識正則表示式 ####正則表示式常用的字元(注意區別於萬用字元裡面的符號)#### -*

java學習筆記System

系統 arr 操作系統 ring system tro separate rate java學習筆記 System類常用總結 System類概述   java.lang.System類,系統屬性信息工具類 常用靜態方法:   1. 1 public static long

Java學習筆記——Manth和String

  (1) Math:常用的數學運算,都是靜態方法 方法摘要  static double abs(double a)           返回 double 值的絕對值。

Java學習筆記——常用

時間類 案例 執行 技術分享 form 格式 時間 mage edate Random,String,Math 1.Random Random() 創建一個新的隨機數生成器 案例:產生3個5-10的隨機數 運行結果 註意: 2.StingBuffer,

Java學習筆記抽象與介面的應用

1、抽象類的實際應用 — 定義模板 假設有這樣的場景,將人分為工人和學生,兩者都能說話,只是說話的內容不一樣,換句話說,說話這個功能應該是一個具體功能,說話的內容由學生和工人決定,我們可以用抽象類實現這個場景 abstract class Person2{ private S

Java學習筆記抽象基本概念(1)

1、基本概念 抽象類:包含一個抽象方法的類 抽象方法:用abstract關鍵字宣告,且只有方法名沒有方法體的方法。 1.1 抽象類的定義和使用規則 包含了一個抽象方法的類必須是抽象類 抽象類和抽象方法都要用abstract關鍵字宣告 抽象方法只需要宣告不用實現

Java學習筆記LinkedList基本用法

LinkedList簡介LinkedList 是一個繼承於AbstractSequentialList的雙向連結串列。它也可以被當作堆疊、佇列或雙端佇列進行操作。LinkedList 實現 List 介面,能進行佇列操作。LinkedList 實現 Deque 介面,即能將L

Java學習筆記(31)--介面 (一)

一、基本概念 介面(Interface),在JAVA程式語言中是一個抽象型別,是抽象方法的集合。介面通常以interface來宣告。一個類通過繼承介面的方式,從而來繼承介面的抽象方法。 如果一個類只由抽象方法和全域性常量組成,那麼這種情況下不會將其定義為一個抽象類。只會定義為一個介面,所以介面嚴格的來

Linux學習筆記管道、重定向與表達式

linux管道與重定向 linux學習筆記 linux 正則表達式 管道:前一個命令的輸出,作為後一個命令的輸入命令1 | 命令2 | 命令3| 命令4 #tee 即在顯示器顯示,又在文件在保存文件例#echo “hello ,word” | tee /tmp/ hello.out例#wc -l

【Python3 爬蟲學習筆記】基本庫的使用 8—— 表示式 1

三、正則表示式 1.例項引入 開啟開源中國提供的正則表示式測試工具 http://tool.oschina.net/regex/ ,輸入待匹配的文字,然後選擇常用的正則表示式,就可以得出相應的匹配結果。 對於URL來說,可以用下面的正則表示式匹配: [a-zA-z]+://[^\

【Python3 爬蟲學習筆記】基本庫的使用 12—— 表示式 5

6. compile() compile()方法可以將正則字串編譯成正則表示式物件,以便在後面的匹配中複用。示例程式碼如下: import re content1 = '2016-12-15 12:00' content2 = '2016-12-17 12:55' content3

【Python3 爬蟲學習筆記】基本庫的使用 11—— 表示式 4

4. findall() search()方法可以返回匹配正則表示式的第一個內容,但是如果想要獲取匹配正則表示式的所有內容,就要藉助findall()方法了。該方法會搜尋整個字串,然後返回匹配正則表示式的所有內容。 上一節中的HTML文字中,如果想要獲得所有a節點的超連結、歌手和歌名,就

【Python3 爬蟲學習筆記】基本庫的使用 10—— 表示式 3

3.search() mathch()方法是從字串的開頭開始匹配的,一旦開頭不匹配,那麼整個匹配就失敗了。因為match()方法在使用時需要考慮到開頭的內容,這在匹配時並不方便。它更適合用來檢測某個字串是否符合某個正則表示式的規則。 search()方法在匹配時會掃描整個字串,然後返回第

【Python3 爬蟲學習筆記】基本庫的使用 9—— 表示式 2

1.1 匹配目標 如果想從字串中提取出一部分內容,可以用()括號將想提取的子字串括起來。()實際上標記了一個子表示式的開始和結束位置,被標記的每個子表示式會一次對應一個分組,呼叫group()方法傳入分組的索引即可獲取提取的結果。示例如下: import re content =

Java開發筆記(三十八)利用表示式校驗字串

前面多次提到了正則串、正則表示式,那麼正則表示式究竟是符合什麼定義的字串呢?正則表示式是程式語言處理字串格式的一種邏輯式子,它利用若干保留字元定義了形形色色的匹配規則,從而通過一個式子來覆蓋滿足了上述規則的所有字串。正則表示式的保留字元主要有:圓括號、方括號、花括號、豎線、橫線、點號、加

表示式實現二代身份證號碼驗證

最近專案需要對身份證進行比較合理的篩選,並不想用到第三方介面,所以寫了個方法: 包括支援身份證號合法性驗證, 支援18位身份證號,支援地址編碼、出生日期、校驗位驗證. 基本上這樣就可以了. IdCodeValid:function(code){ //身份證號合法性驗證 //支援15位和18位

Sed 命令 & 表示式

1.簡介 sed是非互動式的編輯器。它不會修改檔案,除非使用shell重定向來儲存結果。預設情況下,所有的輸出行都被列印到螢幕上。 sed編輯器逐行處理檔案(或輸入),並將結果傳送到螢幕。具體過程如下:首先sed把當前正在處理的行儲存在一個臨時快取區中(也稱為模式空間

表示式中的\B和\b

對於正則表示式的中\B和\b 有些地方會出現弄不懂的情況 或許你看了下面這篇部落格 你就能夠對\B和\b認識加深了 根據檢視API可以知道 \B和\b都是邊界匹配符 先說說\b這個單詞邊界吧!竟然想了解 首先必須清楚什麼叫單詞邊界!我們可以以\b為分

java入門學習筆記1(的定義,代碼的編譯執行)

spa hex nts 自動調用 [] alt vim 進制 技術 這篇文章講解Java代碼的基本執行過程 我們先拋開各種JAVA IDE,開發工具,只使用文本編輯器,以突出最本質的東西。 在Linux環境下,我們編輯一個文件: vim HelloWorld.java