• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:正規表現<置き換え>が実行してくれません)

正規表現<置き換え>が実行されない理由と解決方法

このQ&Aのポイント
  • 正規表現を使用して改行マークを置換しようとすると、表示が元の状態のまま変わらない問題が発生します。
  • この問題の原因は、スクリプト内のエラーです。エラーが見つけられずにいます。
  • 解決方法として、エラーを見つけるためにデバッグし、適切な置換処理を行うことが必要です。

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

  • ベストアンサー
noname#199778
noname#199778
回答No.4

正規表現を $data=~ s/\\n/<br>/g; にしてみてはいかがでしょうか? 現状のスクリプトですと、$dataに代入された文字列の最後にある改行コードを除去するだけになっているようです。 「\n」が文字として記述されているテキストファイルで、それがデータレコードの区切り(改行コード)として認識されていないのであれば、それはメタ文字の\nとしてではなくて、単なる\という文字にnが続いているだけの文字列として扱われているのではないかと… \をエスケープして\\nと記述して、\nという文字を変換させるようにすれば、うまくいくのではないでしょうか。 見当違いでしたら、ごめんなさい。

tonka729
質問者

お礼

lead1976さま、そして皆様、ご親切に感謝いたします。 <\をエスケープして\\nと記述して、\nという文字を変換させる これをやってみました。一発でできてしまいました。 あまりのたやすさに、あっけにとられました。 ありがとうございました。今後ともよろしくお願いいたします。

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.3

ifの条件判定がずれていませんか? else{ s/\n/<br>/g; }とでもいれて確認してみましょう。 また、lastで飛ぶタイミングがずれていませんか? index関数、0は戻ってきません。 通常、戻ってくるのは-1です(厳密には確か$[-1ですが) その他、本題とはそれますが、 ループの添え字が1ずれている気がします。 #foreachで書いた方が楽できそうです #一般的には一気読みして置換することが多いような気がしますが

すると、全ての回答が全文表示されます。
  • the845t
  • ベストアンサー率33% (246/743)
回答No.2

改行コードが\nじゃないとか? \r\nとか。

tonka729
質問者

お礼

データは、例えばこの単語のデータをはっしょってお示しすると、次のような単純なものです。\rはありません。 $data='Gesicht /// n. \n1. jm. 目を保つ \n2. [engl. の目にとまる \n3. Gesichte sehen 幻影を見る' 希望している置換結果はこう表示して欲しいのです。 Gesicht /// n. 1............. 2............. 3...............

すると、全ての回答が全文表示されます。
  • the845t
  • ベストアンサー率33% (246/743)
回答No.1

\nの前に空白が入っていますよ。

tonka729
質問者

お礼

the845tさま、ご回答ありがとうございます。実は空白を入れないでやってみてもだめだのです。 if (index($data, $tango.' /// ')==0) {$data=~ s/\n/<BR>/g; print "$data\n"; last; } ここのあたりに他に原因がありませんでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A