人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

perlの正規表現について質問させてください。

「AAAhogeAAAhogeAAAhogeAAAhogeBBB」
から
最後の「AAAhogeBBB」を抜き出したいのです。

「AAAhoge」は複数回繰り返される可能性があります。

量指定子最短マッチとして"+?"があると思いますが、
これは前方から一致させていくので、
この逆のような働きをするような正規表現の記述の方法はありますでしょうか。


●質問者: the_yakisoba
●カテゴリ:コンピュータ インターネット
✍キーワード:Perl マッチ 定子 正規表現 記述
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● Craftworks
●20ポイント
$str = 'AAAhogeAAAhogeAAAhogeAAAhogeBBB';
if ( $str =~ /(AAAhogeBBB)$/ ) {
 print "match";
}
else {
 print "not match";
}

こういうことですか?

◎質問者からの返答

「hoge」に何が入るかは不明とお考えください。

よろしくお願いします。


2 ● masahikokimoto
●20ポイント

うーんとどこが可変なんかがよくわかりませんが、$が文字列末尾にマッチしますので、

/.+(AAAhogeBBB)$/

こんな感じのことをやりたいのでしょうか。

◎質問者からの返答

説明不足で申し訳ないです。

「AAA***AAA***AAA***BBB」という文字列に対して、

最後の「AAA***BBB」のみを一致させたいです。

「***」に何が入るかは不明です。

現状は下記のようにしています。

(reverse 'AAA***AAA***AAA***BBB') =~ /(BBB.+?AAA)/;


3 ● b-wind
●20ポイント

正攻法(先読みを使う)

my $str = 'AAAhogeAAAhogeAAAhogeAAAhogeBBB';
my $match = 'unmatch';
$match = $1 if $str =~ /((AAA)(?!.*AAA)(.+?)(BBB))/;
print "$match\n";

4 ● masahikokimoto
●20ポイント

ということなら、

$str = "AAAhogeAAAhugeAAApugeBBB";

$str =~ /(AAA[^A]+)+(AAA.+BBB)$/;

print "$2\n";

こんな感じですか?


5 ● pyopyopyo
●20ポイント

/AAA[^(AAA)]*BBB$/ ですかね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ