ちなみに分の途中にカンマやピリオドがある場合は最初にスペースと置換しておこうとおもっています。
例
単語数:3
開始位置:4
原文
The concept of language errors is a fuzzy one.
取得したい文字列
①先頭から指定された「単語数」分の単語を取得するの場合
The concept of
②最後から指定された「単語数」分の単語を取得する
a fuzzy one
③指定された「開始位置」から指定された「単語数」分の単語を取得する
language errors is
おしえてくださいよろしくお願いします。
http://www.hatena.ne.jp/1101996039#
人力検索はてな - perlである文の①先頭から指定された「単語数」分の単語を取得する、②最後から指定された「単語数」分の単語を取得する、③指定された「開始位置」から指定された「単語数..
$t = ”The concept of language errors is a fuzzy one.”;
$n = 3;
$s = 4;
print ”1 $1¥n” if $t =~ /((¥S+¥s*){$n})/;
print ”2 $1¥n” if $t =~ /((¥S+¥s*){$n}$)/;
print ”3 $2¥n” if $t =~ /(¥S+¥s*){$n}((¥S+¥s*){$n})/;
このような感じでどうでしょう?
$word = ”The concept of language errors is a fuzzy one.”;
$start = 4;# 開始位置
$span = 3;# 単語数
#-- 1 --
$first = $word;
$first =~ /^((¥w*¥s){$span})/;
print $1, ”¥n”;
#-- 2 --
$end = $word;
$end =~ /((¥w*¥s?){$span})¥.$/;
print $1, ”¥n”;
#-- 3 --
$start--;# 開始位置は1減らしておく
$middle = $word;
$middle =~ /^(¥w*¥s){$start}((¥w*[¥s¥.]){$span})/;
print $2, ”¥n”;
http://cocohome.hp.infoseek.co.jp/perl_ref/split.html
Perl Reference:split
splitでアレイに格納すれば好きな部分だけ取り出せますよ。
http://www.din.or.jp/~ohzaki/regex.htm
Perl正規表現雑技
# 単語にアポストロフィが含まれる場合は考慮していません。
my $str = ’The concept of language errors is a fuzzy one.’ ;
my $num = 3 ;
my $start = 4 ;
my $get1 = ($str =~ /^((¥w+(¥b|¥s)){$num})/)[0] ;
my $get2 = ($str =~ /((¥w+(¥b|¥s)){$num})(¥W)*$/)[0] ;
my $get3 = ($str =~ /^(?:(?:¥w+(?:¥b|¥s)){@{[$start-1]}})¥W+((¥w+(¥b|¥s)){$num})/)[0] ;
print <<”result” ;
$get1
$get2
$get3
result
exit ;
できました ありがとうございました。
そうですね。でも具体的に知りたかったんです。できれば正規表現で