Perlの正規表現について
[上に]
[前に]
[次に]
asap
[E-Mail]
2000/03/29(水) 10:06:54
こんにちは
初心者なもので、Perlの正規表現について質問させてください。
$contentsという変数の中に
名前=AAA
生年月日=
住所=BBB
というデータがあった場合、=の後にデータのない行を削除するには、
$contents=~ s/^\.\+=\n//g;
では間違いでしょうか。
初歩的な質問ですみませんが、よろしくお願いします。
javaka
2000/03/29(水) 10:34:35
$contents=~ s/.*=\n//g; でしょう。
文字列でない「.」とか「+」はエスケープしちゃだめでしょう。
Syn
[E-Mail]
2000/03/29(水) 10:41:58
削除とゆうか、空行になってしまうのではないかと思いました。
$contents=~ s/^.+=\n//g;
よりは
$contents=~ s/^[^=]+=$//g;
のほうがいいような気が。
S-pore
[HomePage]
2000/03/29(水) 10:52:58
> $contentsという変数の中に
> 名前=AAA
> 生年月日=
> 住所=BBB
> というデータがあった場合
というのが,
$contents = "名前=AAA\n生年月日=\n住所=BBB\n";
という意味なのなら,デフォルトで「^」ではまずいような気がします。
(文字列の先頭にしかマッチしなかったはずなので)
$contents =~ s/^.+\=\n//mg;
元のを生かすならこんな感じだと思います。
でも javaka さんのやり方のほうがスマートでいいですね。
Syn
[E-Mail]
2000/03/29(水) 10:59:01
あ、そうか。 @contents じゃないのですね。
上のわたしのは無視してください。 すみません。
asap
[E-Mail]
2000/03/29(水) 11:12:07
[[解決]]
javaka さんの方法で解決しました。助かりました。
Syn さん、S-pore さん、ありがとうございました。
+とか*とかの文字はどういう場合にエスケープしないと
いけないのかなど、もっと勉強しないといけないですね。
asap
[E-Mail]
2000/03/29(水) 11:12:21
[[解決]]
javaka さんの方法で解決しました。助かりました。
Syn さん、S-pore さん、ありがとうございました。
+とか*とかの文字はどういう場合にエスケープしないと
いけないのかなど、もっと勉強しないといけないですね。
ぁ
2000/03/29(水) 11:26:51
>$contents=~ s/.*=\n//g; でしょう。
gは必要なのでしょうか?
javaka
2000/03/29(水) 13:49:26
>gは必要なのでしょうか?
今回は必要ないです。
なんたってデータが3つでマッチが一つですから...。
しかし、普通は多数のケースがほとんどですので、gをつけたほうがいいです。
つけれは、全行対象で、つけなければ、はじめの一つのみ対象です。
yoru
2000/03/29(水) 14:06:06
>+とか*とかの文字はどういう場合にエスケープしないと
>いけないのかなど、もっと勉強しないといけないですね。
<B>文字</B>として使用したい場合はエスケープするべき、
<B>メタ文字</B>として使用したい場合はエスケープしてはいけない。
追加発言
2000/03/29(水) 14:08:30
>今回は必要ないです。
>なんたってデータが3つでマッチが一つですから...。
いんや〜
多分ループでデータが1行ずつ入ってくる処理なんだと思うぞ。
なりきり
2000/03/29(水) 18:08:30
スクリプトをたぶんforeachで処理してるんでしょうけど、データ=値という形であればhashを利用したほうが無難だと思いますよ。なんせ、処理が早くなるし、データのメンテナンスもしやすくなるしぜひおためしあれ。
[上に]
[前に]
[次に]