$- | $+ | @+ | @-
與模式相關的變數在整個發生模式匹配的動態範圍內都可見,換句話說,他們就像是local宣告的一樣,不用自己定義就能使用。
@+ à @last_match_end
@- à @last_match_start
$+ à $last_paren_match
$^r à $last_regexp_code_result
$& à $match
$' à $postmatch
$` à $prematch
example:
my $str = "*****bange&&&&&mantou!!!!!chifan*****";
$str =~ /(bange)\s+(mantou)\s+(chifan)/;
print "$-[0]\t$-[1]\t$-[2]\t$-[3]\t$-[-1]\n"; ### 5 5 15 26 26
print "$+[0]\t$+[1]\t$+[2]\t$+[3]\t$+[-1]\n"; ### 32 10 21 32 32
print "$+\n@-\n@+\n";
###
chifan
5 5 15 26
32 10 21 32
注:
>>一般匹配的情況下(沒有圓括號),所有的$-[n],(n!=0/-1)的情況都是沒有意義。\
這時:$-[0] 匹配到的字串的第乙個字元的位置(所有的位置從0開始,下同)
$+[0] 匹配到的字串的最後乙個字元的後乙個字元的位置。
位置:可以理解為偏移量。
>>特殊情況下(有乙個或者多個圓括號),所有的$±[n],(n<=圓括號的個數)都是有意義,但是$-[0]和$+[0]都是多餘的,因為$-[0]==$-[1],$+[0]=$+[n],(n=圓括號的個數)。
>>其他變數的含義(含有圓括號的情況下存在)
$-[1/2/3] 匹配到的第
1/2/3個括號中內容的第乙個字元的位置。
$+[1/2/3] 匹配到的第1/2/3個括號中內容的最後乙個字元的下乙個字元的位置。
@-/@+:分別是$-[n]/$+[n]的陣列,以陣列的形式儲存位置。
$+: 最後乙個圓括號中匹配上的字串。
特別注意:$-並不是正規表示式的匹配變數,它存在於檔案控制代碼中,意義是
$- --> $format_lines_left
>>例外變數
$^r,$*和$digits曾也是正規表示式的變數,但是現在不再使用或者本人測試時沒有意義。當然我也不準備用那麼多,以上的足夠了,呵呵
>>摘抄
@-
最近一次正規表示式匹配的部分在目標字串中的起始偏移量
@+
最近一次正規表示式匹配的部分在目標字串中的終止偏移量
$&
最近一次正規表示式匹配到的部分
$`
在目標字串中最近一次正規表示式匹配到的部分之前的內容
$'
在目標字串中最近一次正規表示式匹配到的部分之後的內容
·$`
is the same as
substr
($var,
0,$-[0
])
·$&
is the same as
substr
($var,$-[
0],$+
[0] - $-[
0])
·$'
is the same as
substr
($var,$+[
0])
·$1
is the same as
substr
($var,$-[
1],$+
[1] - $-[
1])
·$2
is the same as
substr
($var,$-[
2],$+
[2] - $-[
2])
·$3
is the same as
substr
($var,$-[
3],$+
[3] - $-[
3])
摘抄是部落格烏托邦的內容,具體**請移步到
正規表示式 模式匹配 特殊變數 1
1 2 n 每一次成功的匹配了乙個模式 包括替換 操作符都會把變數 分別設定為匹配內容左邊的內容,匹配的內容和匹配右邊的文字,這個功能對字串分解為元件很有用。為了有更好的顆粒度和提高效率,你可以用圓括弧捕捉你特別想分離出來的部分。每對圓括弧捕捉與圓括弧內的模式相匹配的子模式。圓括弧由左圓括弧的位置從...
正規表示式中的特殊匹配
貪婪匹配和惰性匹配 預設的貪婪匹配是從後往前匹配,最大長度的匹配,惰性匹配就是在量詞後面加個?從字串的前面開始匹配,最小長度的匹配 舉例 123abc d 匹配的是123,d 匹配的是1 可以用在正向斷言中,如x y x?y x 捕獲括號,匹配x並記住匹配 x 非捕獲括號,匹配x但不記住匹配,即後面...
特殊正規表示式
特殊需求表示式 2 網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 3 interneturl a za z s 或 http w w w 4 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 ...