プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。
[A] A [B] B [C] C [D]
という文字列があります。
[の前と、]の後には半角スペースが1個入っています。
これで、[]に囲まれた部分だけを選択したくて、
\[.*\] としたのですが上手く行きません。
このような特殊?な場合は正規表現であらわすことはできないのでしょうか?

A 回答 (7件)

perl5互換ですので、


\s*\[.*?\]\s* を置換前
置換語を空文字列にすれば、なんたらかんたら が得られると思います。
\[.*\] ではなく \[.*?\] とします。 *の後に?をつけると
最短一致になります。これで、個々の[]にマッチします。
\[.*\]は最長一致なので、[A] A [B] B [C] C [D] 全体にマッチします。
(最初の[とDの後の最後の]迄マッチします)
    • good
    • 0
この回答へのお礼

この方法で上手く行きました。
ありがとうございました!!

お礼日時:2007/06/05 22:50

>[00:00:10] なんたら [00:00:15] かんたら とあったら、


>なんたらかんたら と繋がるようにしたいのです。
なら単純に、エディタの置換機能で

\s*\[\d\d:\d\d:\d\d\]\s* を ''(空文字列)に置換

でいいんじゃない?
    • good
    • 0

#4です。

考えすぎて余計な事していました。
@result = $str =~/\[(.*?)\]/g;
シンプルにこっちで。
    • good
    • 0

他の方のいわれているように、


言語も仕様(抜き出す条件)もわからない部分がありますが。
Perlしかわからないんで、Perlで。

my $str = " [A] x [B] y [C] z [D] ";
@result = $str =~/(?<=\[).*?(?=\])/g;
print "@result"; # → a b c d
    • good
    • 0

言語も仕様も不十分だけども


とりあえず perl 版

my $a = " [A] A [B] B [C] C [D] ";
my @list = $a =~m <\[([^]]*)\]>g;
$,=" ";
print @list;
    • good
    • 0

1.まず、言語の提示をお願いします。

どの言語の正規表現でしょうか。
声域表現といっても、言語により方言があります。
2.この場合、取り出したいのは、[]の中の文字
つまり、[A] A [B] B [C] C [D]の A B C Dですか。
又、[A] Aの Aは両方とも必ず同じ値なのですか?
それとも [X] A のように異なってもよいのですか。
つまり、一般的には、
[a] A [b] B [b] C [d]のようになるのでしょうか。

この回答への補足

ご指摘ありがとうございます。
実際はプログラム言語ではなく、テキストエディタ(サクラエディタ)の正規表現です。
正規表現はプログラミングの時に良く使うと思ったので、こちらで質問させていただきました。
実際のやりたいことは、音楽ファイルの歌詞ファイルから、タイムタグ
の部分を切り取りたいのです。
[00:00:10] なんたら [00:00:15] かんたら とあったら、
なんたらかんたら と繋がるようにしたいのです。

補足日時:2007/06/03 17:34
    • good
    • 0

\[[^ ]+\] ということ?



使っている処理系によっては「スペース以外」を \S などで表現できるので

\[\S+\] とか

ピリオドは「任意の」一文字なので、当然スペースにもマッチして、正規表現は特に指定がなければ、「最も長く」マッチするよう選択します。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!