接著上一話,正規表示式是個好東東,在處理字串方面特別強大,但我在使用過程中也出現了一些疑惑
大家都知道(,),[,]這些符號在正規表示式中扮演的很重要的角色,而$1,$2....也匹配著有()返回的 相應的結果,於是便出現了乙個疑問,當這些符號出現巢狀時,那$1...$2....返回的該是什麼呢,請看一下**
#usr/bin/perl
$a="asdd";
$a=~/(/w(/w))/;
print $1."/n".$2;
這段**應該很好理解,只做了乙個巢狀,返回的結果是
as
s
為什麼會是這個結果呢,經過分析,我個人的理解是$1應該代表的是最外面的圓括號,$2代表著巢狀著的第二層圓括號,以次類推下去.
#usr/bin/perl
$a="asdd";
$a=~/(/w(/w(/w)))/;
print $1."/n".$2."/n".$3;
結果:
asd
sd
d
我想這個應該比較好理解了吧
#usr/bin/perl
$a="asde";
$a=~/(/w(/w(/w)))(/w)/;
print $1."/n".$2."/n".$3."/n".$4;
這一段**對前面的**有一些改動,先看結果
asdsdd
e原來是把第乙個圓括號包括裡面巢狀的括號處理完再處理第二個圓括號.
好,那麼,我們再深入一點,看看()與的互相巢狀問題,廢話少說,直接看**
#usr/bin/perl
$a="asde";
$a=~/([1/w][/w/n])/;
print $1;
結果:as
這段**應該也不難理解,在圓括號裡先找尋第乙個方括號匹配,再找尋第二個方括號匹配的,在將圓括號裡所匹配的作為乙個整體返回.
好,接著看**:
#usr/bin/perl
$a="asdd";
$a=~/([/w(/w)])/;
print $1."/n".$2;
結果:
a
結果只輸出了乙個a,而我用了兩個圓括號啊,怎麼會這樣呢.一時沒有頭緒,那我們把**改簡單一點吧
#usr/bin/perl
$a="asdd";
$a=~/([(/w)])/;
print $1."/n".$2;
結果:
a
出乎意料,結果仍然是乙個a,莫非裡不支援對()匹配結果的返回,我們再把**改簡單一點
#usr/bin/perl
$a="asdd";
$a=~/[(/w)]/;
print $1;
結果:
沒有輸出值,看來證實了我的想法:裡不支援對()匹配結果的返回,唉,忙了大半天,搞死我了~~~
正規表示式點滴
1 元字元 元字元 名稱 匹配物件 點號單個任意字元 字元組列出的任意字元 排除型字元組 未列出的任意字元 脫字元行的起始位置 美元符行的結束位置 反斜線 小於 單詞的起始位置 反斜線 大於 單詞的結束位置 豎線匹配分隔兩邊的任意乙個表示式 括號限制豎線的作用範圍 2.表示重複的元字元 次數下限 次...
Python 正規表示式學習(二)正規表示式語法
一,單一字元匹配 1 匹配任意字元 import re res re.match r a.abcd print res.group 列印結果 abc一點.表示匹配任意的字元。上面的 表示匹配a後面的任意兩個字元。必須從a開始。若寫成 b.則會發生錯誤。2 匹配指定字元 如 0 9a za z 表示 ...
正規表示式學習(二)之常見正規表示式彙總
d 非負整數 正整數 0 0 9 1 9 0 9 正整數 d 0 非正整數 負整數 0 0 9 1 9 0 9 負整數 d 整數 d d 非負浮點數 正浮點數 0 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 正浮點數 d d 0 0 非正浮點數 負浮點數 ...