WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:perlでのsplitの方法について

0:[投稿] 123 [2003/12/26 21:01 ][環境:  apache perl]

perlのsplitの方法がうまくいきません。

『 ; 』で区切られた文字列を配列にして取得したいのですが、
とりあえず現在以下のようにしています。
$s = "aiueo;aiueo";
@s = split(/;/, $s);

ところが、;(セミコロン)自体を入力する際に \; としたいので
すがsplitでうまく処理できません。

@a = split(/[^\\];/, $s);

このようにしてみましたがやはり最後の1文字が消えてしまいます。
この場合、どのようにしたら良いのでしょうか?


1:[回答] windows [2003/12/26 21:24 ]

$s = "aiueo\;aiueo";
@a = split(/;/, $s);

初心者の私が言うのもなんですが、これじゃダメですか?
回答になっていなければ、申し訳ありません。


2:[回答] nero [URL] [2003/12/27 22:09 ]

「最後の1文字が消えて」がどういう事を指されているのかが分からないです。あまり自信はありませんが、次のようなコードでいかがでしょう。


# 元文字列
$str = 'aiueo;aiueo\;kakikukeko';

# '\' に後続しない ';' で区切る
@ary = split(/(?<!\\);/, $str);

foreach $i(@ary) {
    # エスケープされた '\;' を ';' に置換
   $i =~ s/\\;/;/g;
   # 出力テスト(不要)
   print "$i\n";
}


正規表現は次のサイトを参考にしました。

◆ perlre - Perlの正規表現
http://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html

(?<!pattern)
長さゼロの negative lookbehind assertion です。例えば/(?<!bar)foo/ は、“bar”に後続していないすべての“foo”にマッチします。固定長 の lookbehindに対してのみ働きます。


3:[完了] 123 [2003/12/27 22:56 ]

有り難うございます。
まさにこれです。

こんな正規表現もあるんですね。教えていただいたページも
見ましたが、すごいですね。有り難うございました。助かります。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World