正規表現の質問です。


文字列を置き換える場合に、やりたいことがあります。
$htmlの中に、 aaaあいうえおbbb というデータがあり、それを aaaかきくけこbbb に直したい場合、

$html =~ s/aaa.*bbb/aaaかきくけこbbb/;

でいけたので問題ないのですが、 aaaあいうえおbbb の中に改行が入っている場合、

aaaあい
うえおbbb

だとうまくいきません。何か、ほかに方法があるのでしょうか?
よければ教えてください。また、ほかに効率のよいやり方がある場合は押してください。

ちなみに あいうえお は、その場その場で文章が長くなったり短くなったりします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/01/24 15:25:42
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:ootatmt No.1

回答回数1307ベストアンサー獲得回数65

ポイント35pt

$html =~ s/aaa.*bbb/aaaかきくけこbbb/s;

このように最後に s を付けてやれば改行にもマッチするようになり、うまくいくと思います。

id:zachouR

なるほど!!!

わかりました!!!!

ありがとうございます!助かりました。

2007/01/17 16:16:50
id:nev No.2

回答回数77ベストアンサー獲得回数4

ポイント35pt

perl なら

$html =~ s/aaa.*bbb/aaaかきくけこbbb/s;

のように末尾にsオプションをつければいけると思います。

sオプションをつけることにより、 「.」 が改行にもマッチするようになります。

id:zachouR

ありがとうございます!

もっと、勉強しなければいけませんね、、、。sをつけるだけでよかっただなんて、、、。

ありがとうございました!

2007/01/17 16:16:48
id:b-wind No.3

回答回数3344ベストアンサー獲得回数440

ポイント10pt

言語が分からないけど、Perl だと仮定する。

$html =~ s/aaa.*bbb/aaaかきくけこbbb/m;

http://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html

m

文字列を複数行として取り扱います。

id:nc_cls No.4

回答回数15ベストアンサー獲得回数0

ポイント10pt
#!/usr/bin/perl
$html = <<_HTML_;
aaaあい
うえおbbb
_HTML_

$html =~ s/(aaa).*(bbb)/\1かきくけこ\2/s;
print $html;

これでいかがでしょうか
マッチした前後の文字列を置換後にそのまま流用する形です

※下記環境で動作確認済みです

文字コード:SJIS
改行コード:LF
Perlのバージョン:v5.8.5

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません