テキストファイルに「今日の天気(てんき)は晴れ」という文章が書かれていたとします。

このQ&Aのポイント
  • テキストファイルに「今日の天気(てんき)は晴れ」という文章が書かれていました。
  • プログラムを用いてテキストファイルを開き、「$_」に代入された文章を処理する必要があります。
  • 「(てんき)」の部分を「<ruby><rb>天気</rb><rp>(</rp><rt>てんき</rt><rp>)</rp></ruby>」に置換する方法が分からないです。
回答を見る
  • ベストアンサー

テキストファイルに「今日の天気(てんき)は晴れ」という文章が書かれてい

テキストファイルに「今日の天気(てんき)は晴れ」という文章が書かれていたとします。 これを open(IN,"<log.txt"); flock(IN,1); @log=<IN>; foreach(@log){ print "$_"; } というプログラムで開いたとき、「$_」に代入されている「今日の天気(てんき)は晴れ」の「天気(てんき)」の部分を「<ruby><rb>天気</rb><rp>(</rp><rt>てんき</rt><rp>)</rp></ruby>」に置換したいのですが、どうしたらよいのでしょうか? 「天気」の方は「s/([亜-煕]|[一-龠])/$1/g;」で認識するんですが、「(てんき)」はどうすればいいのか分かりません。

  • Perl
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

Perlのバージョンは何でしょうか? スクリプトとlog.txtの文字コードはなんでしょうか? 正規表現で日本語を使うには、いろいろと準備が必要です。 例えば http://www.namazu.org/~tsuchiya/perl/perl-5.8.html など。 >s/([亜-煕]|[一-龠])/$1/g; これは、([亜-煕]|[一-龠])にマッチした文字を、マッチした文字列そのもので置き換えています。つまり、置き換え前後でなにも変わらない、ということです。 例えこれが1バイト単位で処理されていて (亜の1バイト目|[亜の2バイト目~煕の1バイト目]|煕の2バイト目]... という風に解釈されていたとしても、です。そして、[あ-ん]でエラーになるということは、1バイト単位で処理されている可能性が高いです。 正しく文字コード関連の設定をしてあって、Perl 5.8以降なら s"(\p{Han}+)\((\p{Hiragana}+)\)"<ruby><rb>$1</rb><rp>(</rp><rt>$2</rt><rp> ) </rp></ruby>"g になります。 # 念の為。 # sの後は/以外の文字も使えます。今回は#1さんにならって"を使いました。 # 表現中に/が多く使われる場合、/以外の文字にしておくと、いちいち\/を使う必要が無くなります。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「天気(てんき)」の部分を「<ruby><rb>天気</rb><rp>(</rp><rt>てんき</rt><rp>)</rp></ruby>」に置換したい というなら最も簡単なのは s"天気(てんき)"<ruby><rb>天気</rb><rp>(</rp><rt>てんき</rt><rp>)</rp></ruby>"g じゃないかなぁ. 「何も考えていない」といわれそうだけど. 「(なんとか)」にマッチさせるなら s"(([^)]*))"<rp>(</rp><rt>$1</rt><rp>)</rp>"g とか.

humu01jp
質問者

補足

あ……では「昨日の天気(てんき)は雨だったが今日は快晴(かいせい)だ」とあった場合に、 「天気(てんき)」と「快晴(かいせい)」の部分をルビ振り状態で置換したい時はどうすればいいですか? 平仮名の部分を([あ-ん])としたら500エラーが出ました。([亜-煕]|[一-龠])で漢字を認識させるのは平気なのにどうして平仮名は認識せずにエラーが返るのでしょう?

関連するQ&A

  • 正規表現で

    正規表現で $ruby = "昨日の天気(てんき)は雨だったが、今日は快晴(かいせい)だ。明日の天気は曇りの可能\性(かのうせい)が高い"; $ruby =~ s/([亜-煕]|[一-龠])(([^)]*))/<ruby><rb>$1<\/rb><rp>(<\/rp><rt>$2<\/rt><rp>)<\/rp><\/ruby>/g; としたら実行結果がこうなりました。 昨日の天気(てんき)は雨だったが、今日は快・ruby>ー(かいせい)だ。明日の天気は曇りの可能・ruby>ォ(かのうせい)が高い どうすればよろしいですか?

    • ベストアンサー
    • Perl
  • 外部ファイルに「漢字(かんじ)、片仮名(かたかな)、平仮名(ひらがな)

    外部ファイルに「漢字(かんじ)、片仮名(かたかな)、平仮名(ひらがな)、アルファベット」と書かれていたとします。これをperlのopen(IN,">ファイル名");で読み込んでファイルの中身を$_に代入する時に、漢字(かんじ)や平仮名(ひらがな)などの漢字と括弧で囲まれた平仮名の文字列にマッチしたらルビタグを挿入したいのですが、どうすればいいですか? 「漢字(かんじ)」や「平仮名(ひらがな)」を「<ruby><rb>漢字</rb><rp>(</rp><rt>かんじ</rt><rp>)</rp></ruby>」のような文字列に置換したいのです。

    • ベストアンサー
    • Perl
  • javascriptのreplaceについて

    javascriptを使って青空文庫のルビを削除したいと考えています。 例えば以下のような文章です。 「みんながうまそうに食べている<ruby><rb>最中</rb><rp>(</rp><rt>さなか</rt><rp>)</rp></ruby>に、こんな話は禁物だ。… これを 「みんながうまそうに食べている最中に、こんな話は禁物だ。… というようにしたいと思っています。 そこで、以下のようなコードを書いたのですが、どうもうまく動いてくれません。 ----------------------------------------------------------------------- doc = temp.replace(/<ruby><rb>(.+)<\/rb><rp>.+<\/rp><rt>.+<\/rt><rp>.+<\/rp><\/ruby>/gi, "$1"); 処理結果: 「みんながうまそうに食べている最中</rb><rp>(</rp><rt>さなか</rt><rp>)</rp></ruby>に、こんな話は禁物だ。… ----------------------------------------------------------------------- どこが誤っているのでしょうか? ご指導お願いします。

  • xsltを利用して変換後改行が入る

    MSXMLを利用して、XMLをHTMLへ変換しているのですが、変換後、改行が入ってしまいます。 どうすれば改行を取ることができるでしょうか? 【xslt】 <xsl:template match="ruby"><xsl:copy-of select="self::node()" /></xsl:template> 【XML】 <ruby><rb>○</rb><rp>〔</rp><rt>××</rt><rp>〕</rp></ruby> 【結果(HTML)】 <ruby xmlns=""> <rb>○</rb> <rp>〔</rp> <rt>××</rt> <rp>〕</rp>

    • 締切済み
    • XML
  • アンケートフォームの修正(ラジオボタンからチェックボックスにHTMLを書き換えると誤動作します)

    初めてホームページを作成しているものです。 ホームページビルダー11を使っています。 アンケートフォームを作成したのですが、間違いに気付き、 ラジオボタンからチェックボックスへ、HTMLを書き換えて修正しました。 見た目はうまくいったのですが、試しにアンケートに入力して送信しようとすると、この設問に対して、「Q17は必須設問です」のようなメッセージが出ます。 必須設問には違いないのですが、ちゃんとチェックボックスをチェックしているのに、このメッセージがでるのは、おかしいと思います。 どなたか、ちぇっくしていただけないでしょうか? ちなみに、日英併記、日本語にはルビを打っているので、読みにくくなっています。 よろしくお願いいたします!! <H3 id="Q17_head">Q 17.</H3> <BLOCKQUOTE> <P>Prefecture to Teach(Public Data)<BR> <RUBY><RB>教</RB><RP>(</RP><RT>おし</RT><RP>)</RP></RUBY>える<RUBY><RB>都道府県</RB><RP>(</RP><RT>とどうふけん</RT><RP>)</RP></RUBY>(<RUBY><RB>公開項目</RB><RP>(</RP><RT>こうかいこうもく</RT><RP>)</RP></RUBY>)</P> <TABLE> <TBODY> <TR> <TD><INPUT type="checkbox" name="Q17_1"></TD> <TD id="Q17_1_ca"></TD> <TD>Hokkaido <RUBY><RB>北海道</RB><RP>(</RP><RT>ほっかいどう</RT><RP>)</RP></RUBY></TD> </TR> <TR> <TD><INPUT type="checkbox" name="Q17_2"></TD> <TD id="Q17_2_ca"></TD> <TD>Aomori <RUBY><RB>青森県</RB><RP>(</RP><RT>あおもりけん</RT><RP>)</RP></RUBY></TD> </TR> (省略) </TBODY> </TABLE> </BLOCKQUOTE> 以上

  • テキストファイル(《》←をふりがな表記使用/青空文庫形式)をhtml化したい

    趣味で文章を書いている者です。 執筆は秀丸エディタで、ルビは「|振り仮名《ふりがな》」のように 表記しています。 smoopyなどの専用ビューアでは、ちゃんと認識してくれるので、 自分で読む分には不便はないのですが…… しかし、HPに載せる場合には、<ruby><rb>振り仮名</rb><rp>(</rp><rt>ふりがな</rt><rp>)</rp></ruby>としなければなりません。とても面倒です。 この青空文庫形式のルビを、htmlに変換するマクロなどはありませんでしょうか? ~ここからは複数の手順を踏んでも構わないやり方~ 青空文庫形式をwordに変換するマクロはありましたが、wordのhtml化はやたらとファイルが重く、不格好になってしまうのでちょっと……。 なお、青空文庫→Word→一太郎→HTML化という手順も踏みましたが、 この場合だと、振り仮名(ふりがな)とカッコ表記になってしまいます。 http://ameblo.jp/lm064574/entry-10020015211.html こちらのサイトさんの、一太郎のルビを<ruby>タグ化するマクロも試しましたが、最初の方の文字以外、極小サイズになってしまう不具合が発生してしまいました……。 ご存じの方、いらっしゃいましたらご教授お願い致します。

  • ルビ対応ブラウザと非対応ブラウザのルビのサイズ

    HTMLで<ruby>タグ等を使って読み仮名を振ることはできるのですが そのルビの文字サイズを思ったとおりに変えることができません 知りたい事は、ルビに対応しているブラウザで文字サイズを大きくして 非対応のブラウザでは文字サイズは変わらないようにする方法です <ruby><rb>田中</rb><rp>(</rp><rt>たなか</rt><rp>)</rp></ruby>とすると ルビに対応しているブラウザは“田中”の上に小さく“たなか” 非対応のブラウザだと田中(たなか)という感じになりますよね そこでルビ対応ブラウザのルビのサイズをちょうど良いくらいに変更すると 当たり前のことですが非対応のブラウザの文字サイズまで変わってしまいます それをなんとかしようと、自分のわかる範囲で いろいろと試してみたのですがうまくいきません 複雑であっても良いので、ルビに対応したブラウザだけ ルビの文字サイズを変える方法があったら教えてください

  • HPビルダーでのルビ振りで不具合が出ます。

    HPビルダー2001にて製作したネット小説を公開しているのですが、タグを使ってルビを振る際に、ルビ自体は正常に表示されるのですが、右端での折り返しが無効化され、文章が横に伸びてしまうという不具合が出てしまいます。 ビルダー上の「標準」では正常に折り返されているのですが、「プレビュー」及びアップロード後のブラウザ上では折り返しが無効化されていました。 閲覧の際に使用したブラウザはIE8です。 ルビ振り用のタグを削除すると正常に折り返されるので、原因はタグにあると思うのですが……。 ルビを振る際のタグは「<ruby><rb>単語<rp><rt>読み方<rb><ruby>」という形で入力しています。 どうすれば折り返しを保ったままルビが振れるのでしょうか? 以下にルビを振った箇所のHTMLソースを切り取って掲載しておきますので参考にして下さい。 アドバイス、よろしくお願いします。 人工身体装着者に義務付けられている定期心理検査。一ヶ月のうち最も憂鬱な時間を終えて廊下に出たヘイウッドは、通い慣れた窓口に向かう。受付にはいつもの没個性的な制服の職員。<BR>  カウンターにIDカードを放る。職員は無感情な動作でそれを受け取り、ヘイウッドの市民IDを確認。同じく無感情な声で「データを」<BR>  ヘイウッドは着古したコートのポケットを探り、支給品の個人用端末をデスクの上に置く。<BR>  端末を読み込む職員。モニターに捕殺対象となっていた2体のアンドロイドのデータ。<ruby><rb>処理・2体<rp><rt>ツーキル<rb><ruby>。<BR> 「確認終わりました。捕殺対象No,148687、ネクサス6型及びNo,145968、ネクサス7型の処理を確認。<ruby><rb>賞金<rp><rt>ポイント<rb><ruby>をIDカードに入力します」<BR>  IDカードを受け取る。貨幣経済はもはや研究者のデータベースの中にしか存在しない。金銭はいまや実体を失い、チップを埋め込まれたプラスチックのカードに入力された数値データとなっている。<BR>  これで当面の生活費には困らない。そろそろ<ruby><rb>闇市<rp><rt>マーケット<rb><ruby>が開く頃だ。<BR>  安価な軍の流出品が残っているうちに必要なものを買い込んでおかなければならない。<BR>  建物の入り口のあたりで、フランクが声をかけてきた。同業者の一人だ。<BR>

  • HPビルダー2001にて……

    現在HPビルダー2001をwin2000上で使用しているのですが、不具合を見つけたので質問させて頂きます。 <ruby><rb>単語<rp><rt>ルビ<rb><ruby> 上記のようにタグを使ってルビを振ってみたところ、プレビュー画面で画面端での文章の折り返しがされていませんでした。 上記のやり方でルビを振った文章を消去してみたところ、折り返しは正常に表示されたので、原因はここにあると思います。 タグの打ち間違いなのか……? そこで質問なのですが、折り返しを正常にしたままタグでルビを振るにはどうしたらよいのでしょうか? アドバイスお願いします。

  • ruby on railsに関して

    ruby on rails を独学で勉強しようと思い、 「基礎ruby on rails」を用いて、rubyやrailsなどをPCにダウンロードしたのですが、 rubyのバージョンが1.8.7だったので、 自分なりに調べてバージョンを1.9.3にしようとしたのですが、 再起動をするとどうしてもruby1.8.7になってしまいます。 しかたないと思って、1.8.7のまま、 「rails s」のコマンドを実行したら、 ターミナルに ↓ ーーーーーーーーーーーーーーーーーーーーーーー /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:230:in `activate': can't activate rack (~> 1.4.5, runtime) for ["actionpack-3.2.13", "railties-3.2.13"], already activated rack-1.5.2 for ["rack-ssl-1.3.3", "railties-3.2.13"] (Gem::LoadError) from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:246:in `activate' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:245:in `each' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:245:in `activate' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:246:in `activate' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:245:in `each' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:245:in `activate' from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/rubygems.rb:1056:in `gem' from /usr/bin/rails:18 ーーーーーーーーーーーーーーーーーーーーーーー このようなログがでてきました。 調べても内容が分からないので、 分かる人がおりましたら、 どのように対処をすればよいのかを教えていただけると幸いです。

専門家に質問してみよう