15 Perl 正規表示式 正則捕獲

2021-09-23 10:29:22 字數 2009 閱讀 1572

正規表示式在匹配過程中,可以通過小括號()對匹配內容進行捕獲或分組.

對於捕獲變數的引用分為兩種方式, 在匹配模式中, 和匹配模式外.

引用方式

含義\n

匹配模式中獲取捕獲的值, 如 m/(a|b)-\1/, 匹配a-a 或b-b

$n在匹配模式外獲取捕獲值, 如 s/(a|b)/\u$1/, 將a或b變大寫

捕獲變數的存續期指的是到下次值變更的時間.

當正則捕獲模式過於複雜時, 使用數字可能會產生混淆, 那麼可以採用名稱進行捕獲.

$url

="";$url

=~/\/\/(?.*)\/(?.*)/

;print

"host:$+\n"

;print

"user:$+\n"

;

雖然小括號通常用於捕獲匹配到的內容,但是也可以用於分組, 但是並不捕獲. 分組可使正規表示式層次更清楚,當然了也可以借助/x 修飾符新增空白符來使層次更清楚.

$url

="";# 輸出: $1:zongf0504

$url

=~/\/\/(?:.*)\/(.*)/

;print

"\$1:$1\n"

;# 輸出:$1:blog.csdn.net

$url

=~/\/\/(.*)\/(.*)/

;print

"\$1:$1\n"

;

符號

含義$`

儲存匹配內容之前的字串

$&儲存匹配內容的字串

$』儲存匹配內容之後的字串

$str

="";$str

=~/www/

;# 輸出: 匹配前的字串: http://

print

"匹配前的字串: $`\n"

;# 匹配到的字串: www

print

"匹配到的字串: $&\n"

;# 匹配後的字串: .baidu.com

print

"匹配後的字串: $'\n"

;

在陣列上下文中, 會將捕獲的所有內容儲存到乙個陣列中.

5.1.1 示例指令碼

$str

="1:aaa 2:bbb 3:ccc"

;# 匹配模式轉換為陣列

@array

=$str

=~/(\w+):(\w+)/g

;print

"array: @array\n"

;

5.1.2 指令碼輸出
array: 1 aaa 2 bbb 3 ccc
5.2.1 示例

如果不加修飾符g, 那麼只會捕獲第一組

$str

="1:aaa 2:bbb 3:ccc"

;# 匹配模式轉換為雜湊

%hash

=$str

=~/(\w+):(\w+)/g

;@keys

= keys %hash

;print

"$_=$hash\n"

foreach

@keys

;

5.2.2 指令碼輸出
2=bbb

1=aaa

3=ccc

在列表上下文中,可以用捕獲的值對標量賦值.

5.3.1 示例

$str

="root:123456";(

$user

,$pwd)=

$str

=~/(\w+):(\w+)/

;print

"user:$user\n"

;print

"pwd:$pwd\n"

;

5.3.2 指令碼輸出
user:root

pwd:123456

Perl 正規表示式

正規表示式文中列表 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個後向引用 或乙個八進位制轉義符。匹配輸入字串的開始位置。如果設定了 regexp 物件的multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束位置。如果設定了 regexp 物件的multiline 屬性...

Perl正規表示式

元字元 元字元的含義是具有特殊含義的字元,即為元字元,元字元包括 點號能夠匹配所有的單字元,但是換行字元除外 n 簡易量詞 記載匹配正規表示式的時候有些需要重複的字元或者字串,我們在表示這種重複的形式的時候,即是量詞,我們知道的量詞有 表示至少重複一次,表示重複一次或者一次 以上,指的是重複一次或者...

perl 正規表示式

匹配 m 還可以簡寫為 略去 m 替換 s 轉化 tr 這三種形式一般都和 或 搭配使用 其中 表示相匹配,在整條語句中讀作 does,表示不匹配,在整條語句中讀作 doesn t 並在左側有待處理的標量變數。如果沒有該變數和 操作符,則預設為處理 變數中的內容。舉例如下 str i love pe...