close

re = regular expression

我覺得perl 的其中一個特色就是寫re。

有關的function

index

rindex

substr

tr

$_ =~ /xxx/

 

index 的就是可以判斷字串中的子字串的起點在什麼位置。

功用:我們可以用來找一個子字串是否存在於字串。

若不存在,則會回傳-1

index $line, 'pp';  # 判斷$line 裡是否有pp 子字串。

rindex 跟index 差不多,但起點是尾端。

 

substr 一聽就是拿子字串罷了。

但是它還可以用來做substitution。

像是:s/xxx/XX/  # 將xxx 換成XX

$_ =  ABCDEFGH;

substr($_,5,3) = "AAA";

變成ABCDEAAA

不過前提是你要知道子字串的位置。

 

tr 則是將一個個字元做需要的更換

做一對一的更換

例如:tr/A/GG/ 這樣不對。

最多只能tr/A/G/ (A 換成G)

 

在做regular expression 的運算。

有一些特別的變數需要記得。

情況1:我想要知道目前match 的東西是什麼,還有matched 前的子串及matched 後的字串。

交給$` 、$& $' 吧。

例如:

if(/www.hihi.com.tw/)

{

  print "before = $` \n";

  print  "now = $& \n";

  print "after = $' \n";

}

雖然好像很不錯,但是每一次做regular expression 運算,變數裡的值都要再重

新被紀錄。所以會花額外的時間。

那如果不啟動紀錄的功能,要怎麼做?

我目前從書上得知是,都不要用到$` , $& , $' 就好了。

(雖然有點奇怪,不用就好了),勉強先接受好了。

 

情況2:再來是如果你想知道你目前match 的expression 其中一些值是啥。

可以使用( ) 包起來,再用$1 , $2 去做index

例如:

$a = "my house";

if($a =~ /(\w+) (\w+)/)

{

 print $1, $2;

}

$1 是my , $2 是house

情況3 :如果我只是想用( ) 包起來而已,卻不想被紀錄存在$1 , $2 裡,那要怎麼做?

打上?: 在括號裡。

例如:(?:\w+) 就ok 囉。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 lettice0913 的頭像
    lettice0913

    斑的家

    lettice0913 發表在 痞客邦 留言(0) 人氣()