OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

置換のエラー Unmatched [ before HERE mark in regexとは?

  • 暇なときにでも
  • 質問No.156118
  • 閲覧数388
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 52% (20/38)

チャットのログにある特定の文字にリンクを貼りたいと思っています。

たとえば『マイクロソフト』『アップルコンピュータ』『IBM』というキーワードを前もってデータファイルにURLと共に登録しておいて、ログにそれらのキーワードが出てきたらそれらのサイトへのリンクタグをつけます。

で、以下のようなプログラムで置換を行うと決まって『ー』という文字の含まれるキーワード(たとえばアップルコンピュータ)を置換するときにエラーになります。

\のエスケープ文字をつければいいと言うものでもなく、正規表現の問題というだけでどうすればいいのか全く分かりません。また、他の文字でも起こり得ることなのかも分かっていません。アドバイスよろしくお願いします。

Apacheのエラーログ
[Tue Oct 23 16:16:54 2001] [error] [client 127.0.0.1] Unmatched [ before HERE mark in regex m/アップルコンピュー << HERE タ/ at d:\PROGRA~1\APACHE~1\APACHE\CGI-BIN\CHAT\CHATPOST.CGI line 216.

***置換部分の一行***

$CHAT{Message} =~ s/$FILE{Keyword}/$FILE{Keyword}\<a href="http:\/\/$FILE{Link}" target="_blank"><font size=1>*<\/font><\/a>/g;
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル7

ベストアンサー率 68% (13/19)

sjis -> euc -> sjis としているわけですね。
確かに大丈夫だとは思います。

wind 系で apache を使用していらっしゃるようですが、エディタで編集するのが便利ということであれば、「秀丸」などのエディタであれば、sjis, euc などを扱えるので特に困ることもないかと。

「便利」というだけで、sjis -> euc -> sjis とすることもないかな?というのが私の考えですが、いかがでしょう。

もし、sjis ということであれば、JPerl を使用したほうがよいのではないでしょうか。
5.005_03 ベースでよいのであれば、バイナリも存在しますし。
私は Unix 系ですが、JPerl を使用して不具合無くサイトを構築した経験もありますし。ただ、jcode.pl の挙動が怪しいという話は聞いたことがあります。

# 最近 perl はご無沙汰なのですが、5.6 からマルチバイト対応になったと
# 聞いています。
# ただ、どの程度対応なのかは確認していませんが。。。
お礼コメント
katsudon

お礼率 52% (20/38)

いろいろありがとうございました。

http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
を見たところShift_JISは多くの問題を抱えていることが分かりました。
私の知っていた問題点はその一部に過ぎなかったようです。

ほかのスクリプトのデータがかなり膨大なので、
いまさらデータをEUCへ変換することができません。
(サイトはレンタルサーバーを利用していてそこはActivePerlを使って
いるのでJPerlに変更できません。不具合はローカルで実験した時に発生したものです。)

その場しのぎの策でなんとかしたいと思います。
本当にありがとうございました。
投稿日時 - 2001-10-24 13:14:08
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル7

ベストアンサー率 68% (13/19)

ひょっとして、データを Sjift_JIS で記述していませんか? ならば、「ー」だけでなく「表」などもアウトだと思うのですが。(いわゆる、二バイト目があたるという問題です。) JPerl など、日本語対応の perl 以外なら、EUC で保存するほうがよいかもしれません。 文字化けが心配なら、 Content-type: text/html; charset=EUC-JP とす ...続きを読む
ひょっとして、データを Sjift_JIS で記述していませんか?
ならば、「ー」だけでなく「表」などもアウトだと思うのですが。(いわゆる、二バイト目があたるという問題です。)

JPerl など、日本語対応の perl 以外なら、EUC で保存するほうがよいかもしれません。

文字化けが心配なら、

Content-type: text/html; charset=EUC-JP

とすれば、「まず」文字化けはしないと思います。
補足コメント
katsudon

お礼率 52% (20/38)

ありがとうございます。
たしかにShift_JISでデータに記入しています。
たしかに下のような対策を講じるとエラーは起きなくなりました。


Shift_JISだとエディタで編集するのに便利だったので、
他のスクリプトの全てのデータがShift_JISで保存しています。
Shift_JISだとパターンマッチは不可能ということなのでしょうか?
今のところ下の対策で凌いでいますが、
もし対策があれば教えてください。よろしくお願いいたします。

&jcode::sjis2euc(\$FILE{Keyword});
&jcode::sjis2euc(\$CHAT{Message});
$CHAT{Message} =~ s/$FILE{Keyword}/$FILE{Keyword}<a href="http:\/\/$FILE{Link}">*<\/a>/g;
&jcode::euc2sjis(\$CHAT{Message});
投稿日時 - 2001-10-23 23:33:07


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ