來源自 這裡
說明 :
我們可以利用函數 substr 來取出某個字串內的子字串, 透過不訂長度的參數提供客製化的功能; 甚至我們能透過它將特定位置的子字串以提供的字串進行取代.
語法 :
substr 會對參數 EXPR 進行處理.
簡單範例如下 :
使用範例 :
底下透過範例說明使用方法.
- Example 1a. Supply an expression and a positive offset value.
在這個範例將字串 $string 從 offset=4 的位置一直到字串結尾擷取到另一個變數 $fragment. 代碼如下:
執行結果:
- Example 1b. Supply an expression and a positive offset value.
在這個範例中, 透過函數 index() 找到 'people' 所在位置, 並將之指定給 OFFSET. 如此我們可以取得從 'people' 算起一直到字串結束的子字串:
執行結果:
- Example 2a. Supply an expression, a positive offset value and a length
透過 LENGTH 參數, 我們可以決定子字串的長度. 下面從 OFFSET=7 的位置上取出長度為 8 的子字串:
執行結果:
- Example 2b. Supply an expression, a negative offset value and a length
如果我們的 OFFSET 是負數, 說明從字串結果從字串尾往回數. 下面代碼從結尾往回數 16 個位置的 offset 上取長度為 10 的子字串:
執行結果:
- Example 2c. Supply an expression, a positive offset value and a negative length
如果參數 LENGTH 是負數, 說明有多少個長度從結尾的位置被 truncate 掉. 下面代碼取出從字串頭往前數 7 的到字串尾往回數 20 的子字串:
執行結果:
- Example 3. An expression, an offset value, a length and a replacement value
如果有提供 REPLACEMENT 參數, 則子字串會被該參數取代. 下面透過函數 index() 找到 'people' 所在位置並且 'people' 的長度為6. 接著我們使用 REPLACEMENT 參數 將 'people' 取代成 'men':
執行結果:
可以看到原 $string 的 'people' 被替換成 'men', 而且 substr() 依舊返回 'people'.
- Example 4. Assigning to substr()
事實上 substr() 可以被當作 lvalue 使用, 所以你可以透過給定值給 substr() 取代 REPLACEMENT 的功能. 下面代碼將 'people' 子字串取代為 'women':
執行結果:
補充說明 :
* perl 學習手扎 > 第十二章 字串處理
* perldoc.perl.org > functions > substr
* stackoverflow > What are the uses of lvalue subroutines in Perl?
說明 :
我們可以利用函數 substr 來取出某個字串內的子字串, 透過不訂長度的參數提供客製化的功能; 甚至我們能透過它將特定位置的子字串以提供的字串進行取代.
語法 :
substr 會對參數 EXPR 進行處理.
簡單範例如下 :
- my $s = "The black cat climbed the green tree";
- my $color = substr $s, 4, 5; # black
- print "\$color=$color\n";
- my $middle = substr $s, 4, -11; # black cat climbed the
- print "\$middle=$middle\n";
- my $end = substr $s, 14; # climbed the green tree
- print "\$end=$end\n";
- my $tail = substr $s, -4; # tree
- print "\$tail=$tail\n";
- my $z = substr $s, -4, 2; # tr
- print "\$z=$z\n";
底下透過範例說明使用方法.
- Example 1a. Supply an expression and a positive offset value.
在這個範例將字串 $string 從 offset=4 的位置一直到字串結尾擷取到另一個變數 $fragment. 代碼如下:
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $string = 'Now is the time for all good people to come to the aid of their party';
- my $fragment = substr $string, 4;
- print " string: <$string>\n";
- print "fragment: <$fragment>\n";
- Example 1b. Supply an expression and a positive offset value.
在這個範例中, 透過函數 index() 找到 'people' 所在位置, 並將之指定給 OFFSET. 如此我們可以取得從 'people' 算起一直到字串結束的子字串:
- #!/usr/bin/perl
- use strict;
- use warnings;
- # Find the location of the substring 'people'
- my $string = 'Now is the time for all good people to come to the aid of their party';
- my $fragment = substr $string, index($string, 'people');
- print " string: <$string>\n";
- print "fragment: <$fragment>\n";
- Example 2a. Supply an expression, a positive offset value and a length
透過 LENGTH 參數, 我們可以決定子字串的長度. 下面從 OFFSET=7 的位置上取出長度為 8 的子字串:
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $string = 'Now is the time for all good people to come to the aid of their party';
- my $length = 8;
- my $fragment = substr $string, 7, $length;
- print " string: <$string>\n";
- print "fragment: <$fragment>\n";
- Example 2b. Supply an expression, a negative offset value and a length
如果我們的 OFFSET 是負數, 說明從字串結果從字串尾往回數. 下面代碼從結尾往回數 16 個位置的 offset 上取長度為 10 的子字串:
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $string = 'Now is the time for all good people to come to the aid of their party';
- my $length = 10;
- my $fragment = substr $string, -16, $length;
- print " string: <$string>\n";
- print "fragment: <$fragment>\n";
- Example 2c. Supply an expression, a positive offset value and a negative length
如果參數 LENGTH 是負數, 說明有多少個長度從結尾的位置被 truncate 掉. 下面代碼取出從字串頭往前數 7 的到字串尾往回數 20 的子字串:
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $string = 'Now is the time for all good people to come to the aid of their party';
- my $length = -20;
- my $fragment = substr $string, 7, $length;
- print " string: <$string>\n";
- print "fragment: <$fragment>\n";
- Example 3. An expression, an offset value, a length and a replacement value
如果有提供 REPLACEMENT 參數, 則子字串會被該參數取代. 下面透過函數 index() 找到 'people' 所在位置並且 'people' 的長度為6. 接著我們使用 REPLACEMENT 參數 將 'people' 取代成 'men':
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $string = 'Now is the time for all good people to come to the aid of their party';
- my $fragment = substr $string, index($string, 'people'), 6, 'men';
- print " string: <$string>\n";
- print "fragment: <$fragment>\n";
可以看到原 $string 的 'people' 被替換成 'men', 而且 substr() 依舊返回 'people'.
- Example 4. Assigning to substr()
事實上 substr() 可以被當作 lvalue 使用, 所以你可以透過給定值給 substr() 取代 REPLACEMENT 的功能. 下面代碼將 'people' 子字串取代為 'women':
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $string = 'Now is the time for all good people to come to the aid of their party';
- substr($string, index($string, 'people'), 6) = 'women';
- print " string: <$string>\n";
補充說明 :
* perl 學習手扎 > 第十二章 字串處理
* perldoc.perl.org > functions > substr
* stackoverflow > What are the uses of lvalue subroutines in Perl?
This message was edited 24 times. Last update was at 01/10/2012 11:08:33