トップページ⇒php
1001コメント313KB

正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/11/19 21:42ID:Kst3Nn4S
Perlに限らずスクリプト系言語で大活躍の正規表現。
このスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。

註:& や " を書くときには、&amp " と描いておきましょうね。

Perlメモ
 http://www.din.or.jp/~ohzaki/perl.htm
正規表現メモ
 http://www.kt.rim.or.jp/~kbk/regex/regex.html
Regex::Diagram.pm
 http://www.cc.rim.or.jp/~midorin/mad-p/RegexDiagram.html
正規表現
 http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/PRC2kRegex/
UNIX正規表現入門 目次
 http://www01.u-page.so-net.ne.jp/jc4/hiroyuki/rex_index.html
Regular Expression(Riue ちゃんの正規表現講座) - Index
 http://www.sixnine.net/regexp/

ほとんどは↓のリンク集にまとまっています。
正規表現最新リンク集2002
 http://www2.famille.ne.jp/~akio1998/l_grep.html

過去スレ
正規表現道場@2ch
 http://pc.2ch.net/test/read.cgi/php/996105815/
正規表現道場@2ch Part2
 http://pc2.2ch.net/test/read.cgi/php/1038146241/
0328nobodyさん04/03/06 21:48ID:???
>321
ハイフンも使えるから
m/^([\w\-]+\.)*[\w\-]+$/
のような気が。
#ハイフンのエスケープ要るか要らないか忘れたけど
0329nobodyさん04/03/07 22:19ID:???
PHP4で@の読みの「アットマーク」「アトマク」「アツトマァク」「アット」「アツトマアク」らに
マッチする正規表現をお教え下さい。
ア[ッツ]?ト{マ[ーアァ]?ク}? とか アッ?ツ?ト{マ[ーアァ]?ク}? 
初心者なので全然だめです・・。
0330nobodyさん04/03/07 23:11ID:???
上のはメルアドはじきなのでしたけど、
@|@|(あ[っつ]?と).*|(ア[ッツ]?ト).*|(ア[ッツ]?ト).*
でいくことにします。
アットローンでもマッチしちゃうけどいいや・・・・・。
0331nobodyさん04/03/07 23:11ID:???
[アットマーク|アトマク|アツトマァク|アット|アツトマアク]
0332nobodyさん04/03/08 03:41ID:???
ア[ッツ]?ト(マ[ーア]?ク)?
0333nobodyさん04/03/08 05:41ID:???
>332 どうも。
アットローンでもアトムでもマッチしちゃうよね?
^ア[ッツ]?トマ[ーアァ]?ク$     だと「アット」「アト」がマッチしない・・・
「アット」と「アットマーク」にマッチして「アットローン」にマッチしないなんてできないのかなo(~ρ~)o zzz・・・
0334nobodyさん04/03/08 10:05ID:???
>>333
「@ローン」の読みは「アットローン」なんだけど。
マッチしなかったらおかしくないか?@はアットって読んでもいいんだろ?
0335nobodyさん04/03/08 13:19ID:???
PHPで簡単なweb上思いついたスクリプトを書き残すメモ帳のようなものを作成してるんですが
その中で「//〜〜〜\n」や「/* */」などのいわゆるコメントの部分を
色分けして表示したいのですがコメント部分とマッチさせる正規表現がどうしてもわかりません。
「/* */」については/*を<FONT COLOR=RED>/*にし
*/を*/</FONT>にしたのですがこれだと
「""」に囲まれたコメントではない部分も色分けされてしまいます。当たり前ですが・・・。
0336nobodyさん04/03/08 15:37ID:???
>>335
こんなんでいいんじゃないか

<?php
header("Content-Type:text/html; charset=Shift_JIS");

$comment[0] = "\/\/[^\n]*?\n";
$comment[1] = "\/\*(.*?)\*\/";

$msg = "TextTextText // TextText
TextText
TextTextText /* TextText */
TextText
// TextText /* TextText */ Text
Text
";

foreach($comment as $regexp){
$msg = mb_ereg_replace($regexp,"<span style=\"color:red\">\\0</span>",$msg);
}

$msg = nl2br($msg);
echo $msg;
?>
0337nobodyさん04/03/10 21:20ID:???
use Jcode;
$jis=Jcode->new($ARGV[0],'utf8')->jis;
$jis=~s/([^a-zA-Z0-9])/sprintf("%%%02lX",unpack("C",$1))/eg;
$jis=~s/%1B%28B$//; $jis=~s/^%1B%24B//; # <= separate
$jis=~s/%/\\x/g;
こいつで16進にして正規表現かけてんですが

___ファイル内のjisコード文字列____

ああ接続FTP接続うう

__________________________________


FTP接続 <= なら引っかかってくれます

接続FTP <= だと駄目です

  なぜに?
0338未承諾広告※ ◆aiY4htt2.2 04/03/10 21:39ID:???
>>337
テストもせずに s/\G と逝ってみるテスト
033933704/03/10 22:49ID:QeEknFJh
perl FTP接続 <= だとOK
FTP\x1B\x24B\x40\x5CB3

perl 接続 <= これもOK
\x40\x5CB3

perl 接続FTP <= だと駄目でつ
\x40\x5CB3\x1B\x28BFTP

s/\G と逝ってみたいんですがどこで使うんでつか

アホですまそ
0340nobodyさん04/03/11 22:13ID:???
質問させてください。

abc  abc%xyz  123  123%xyz
という4つの文字列があるときに、左から順番に、

$1 に 'abc' が代入されるようにマッチする
マッチしない
$1 に '123' が代入されるようにマッチする
$1 に '123'、 $2 に 'xyz' が代入されるようにマッチする

にはどう書けばよいでしょうか?

/^(?:(abc)|(123)(?:%(xyz))?)$/
だと、3つ目と4つ目の '123' が $2 に入る

/^(abc|123)(?:%(xyz))?$/
だと、2つ目がマッチする

/^(abc|123(?:%(xyz))?)$/
だと、4つ目の $1 に文字列すべてが入る

みたいな感じでだめでした。
わかりにくい上に低レベルな質問で
申し訳ないですがよろしくお願いします。
0341nobodyさん04/03/11 22:40ID:???
>>340
/^(\w+)(?:$|(?<![A-Za-z])%(\w+)$)/
034234004/03/11 23:05ID:???
>>341
ありがとうございました。完璧です。
こういうときに Positive Lookbehind Assertion 使うんですね。
ぜんぜん思いつきませんでした orz
0343nobodyさん04/03/22 16:58ID:JNc4vCtR
if( !reply_to || reply_to.search(/\d/) )

JavaScriptでの分岐条件ですが、
「reply_toがないか、あるいはあっても数字以外の文字が含まれている場合はtrue」
という条件式です。
上記でどうもうまく行っているのですが解せません。
数字以外の文字って「\D」ですよね。何か勘違いしていますか?

perl/CGI+JavaScriptで製作中ですが正規表現はあまりやった事ないです。
あるいは上記条件式だとどう書くのが普通ですか?
0344nobodyさん04/03/22 17:03ID:???
>>343
Web制作板で聞けよ

if (inNan(reply_to)) でどうだ?
0345nobodyさん04/03/22 17:04ID:???
if (inNaN(reply_to)) だった
0346nobodyさん04/03/22 17:54ID:???
>>345
> if (inNaN(reply_to)) だった
isNaN(reply_to)でした。
こんなんがあるんですね。
勉強になりました。
0347nobodyさん04/03/22 18:05ID:???
isNaN で良いの? isNaN("123foo") とかも false になるよ。

あと、aString.search(aRegExp) は、「マッチした位置」を返すので、
たぶん >>343 のはうまくいっていないと思われ。
マッチしないときには -1 を返すので、
if ( !reply_to || reply_to.search(/\D/) >= 0 )
とかじゃないかな?
0348nobodyさん04/03/22 18:21ID:???
>>347
falseになるわけねぇだろうが
034934304/03/22 18:24ID:???
>>347
> isNaN で良いの? isNaN("123foo") とかも false になるよ。

えーと、今回は数字以外の文字が含まれてたら false でオッケイです。
>
> あと、aString.search(aRegExp) は、「マッチした位置」を返すので、
> たぶん >>343 のはうまくいっていないと思われ。
> マッチしないときには -1 を返すので、
> if ( !reply_to || reply_to.search(/\D/) >= 0 )
> とかじゃないかな?

なるほど、、、微妙に返り値が違うんですね。
単純にブール値を返すもんだと思ってました。
勉強になりました。
クライアントサイドJavaScriptってうまく組み込むと便利ですけど、
ブラウザ依存だったりバージョン互換性の問題とか、結構微妙ですね。
いえ、今回の件とは関係ないですけど。
ありがとうございました。
035034304/03/22 18:26ID:???
>>348
> >>347
> falseになるわけねぇだろうが
ああ、そうですね。数字かどうかですからね。
trueでいいんです。
たぶんうっかりミスですね。御指摘どうも。
0351nobodyさん04/03/22 18:41ID:???
>>348
げ、処理系依存なのか。確かに IE だとならないね。
でも、 isNaN("1e0") とかは false になるよね?
0352nobodyさん04/03/29 21:33ID:???
復帰
0353nobodyさん04/04/08 15:03ID:AQ8qwK3r
"abcdeあいうえお\"fghijかきくけこ";

のようなダブルクォートで囲まれた文字列を取得したいのですが、
文字列に\"を含んでいる場合うまく取得できません。

"[^"]*"と書いているので当然と言えば当然なのですが・・・
どのようにしたら、\"を含む文字列をうまく取得できますでしょうか?
0354nobodyさん04/04/08 15:38ID:???
余計なことをせずに最長マッチさせればいいんじゃないの。
/"(.*)"/
こういうのもありかもしれないけど。
/"((?<=\\").*)"/
035535404/04/08 15:46ID:???
盆ミスー適当に修正して
0356nobodyさん04/04/08 17:11ID:???
正規表現とかその手の本には必ず出てくる例題だな。
0357nobodyさん04/04/09 17:13ID:Nk138A/f
かれこれ半日もんどりうってます....

htmlファイル中で、aタグ中のリンク先の置換をやりたいのですが、
・mailto:やtel:が含まれる場合は除外
・リンク先(href="url")のurlが、cgiやphp、jspだったら除外
というのをやりたいのです。
で、それで引っ掛かった分(htmlやhtm)を、特定の文字列に置換したいのです。

で、
/<a href="(([^(tel:|mailto:)][-0-9a-z/@~]+[^(.php|.cgi)]") ([^>]+))>/i
なんてやってるんですが、思うようにならんです。
どこがおかしいのでしょう?
先達の皆さま、よろしくおながいします
0358未承諾広告※ ◆aiY4htt2.2 04/04/09 17:59ID:???
>>357
もしかして、//i -> s///i かな?
s{<a href="((?<!tel:|mailto:).+?(?!\.php|\.cgi)".+?>)}{url=$1}i;

実証はしていませんm(_ _)m
0359未承諾広告※ ◆aiY4htt2.2 04/04/09 18:12ID:???
>>358
グダグダやね鬱。
0360nobodyさん04/04/09 19:04ID:???
>>357-358
s/<a href="((?!tel:|mailto:)[-_.!~*'()a-z0-9;\/:@&=+$,%#]+(?<!\.php|\.cgi))"[^>]*>/url=$1/i;
こんな感じ?

>>357
'?'を許さないことで、クエリストリング付きは
即時却下する所が面白いね。
0361nobodyさん04/04/09 19:08ID:???
>>357
一回のマッチで全部判定できなくもないが、分けた方が楽且つ柔軟。
言語が Perl5 なら

s{
  (
    <a
    [^>]+?
    href=(?:(")|(')|(\b))
  )
  (
    (?(2)[^"]+?)
    (?(3)[^']+?)
    (?(4)[^\s>]+)
  )
  (?=
    (?(2)")
    (?(3)')
    [^>]*?
    >
  )
}
{
  my($pre, $url) = ($1, $5);
  if ($url !~ /^(?:mailto|tel):|\.(?:cgi|jsp|php)$/i) {
    $url =~ ...
  }
  $pre . $url
}egix;
0362nobodyさん04/04/09 21:00ID:B1AI3byV
357です。
明日再挑戦します。
ありがとうございます
0363nobodyさん04/04/10 13:43ID:rupp3c37
357でつ。
360さん、361さん、ありがとう!うまくいきました。
でも、361さんのは、漏れには何をやってるのか識別不能です....鬱
0364nobodyさん04/04/14 21:47ID:8xwTd1PB
おまえらは監視されている(^▽^ケケケ
0365nobodyさん04/04/14 21:47ID:8xwTd1PB
おまえらは監視されている(^▽^ケケケ
0366 04/04/20 01:22ID:UZzv87o5
htmlファイルを読み込んで、
<a href=http://bbq.2ch.net/bbynews/i/>;速報Headline</a> を
<a href="http://bbq.2ch.net/bbynews/i/";>速報Headline</a>
の様に、href=の中身を " で括りたいのですが、
$str =~ s/(<[^>]*\bhref\s*=\s*['\"]?)([^\s\"'>]*)/\1\"\2\"/g;
としてしまうと、元々 " で括られている場合にもさらに " が付いてしまうため困っています。
" が無い場合のみ " で括るようにするにはどうすればよいでしょうか。
お知恵をお貸しくださいませ。
0367nobodyさん04/04/20 06:46ID:???
>>366
s{
  (?<=href=)
  (?:(")|(')|(\b))
  (
    (?(1)[^"]+)
    (?(2)[^']+)
    (?(3)[^\s>]+)
  )
  (?(1)")(?(2)')
}
{"$4"}gix;
0368nobodyさん04/04/20 16:41ID:2Qvzqrcy
質問させてください。
あるhtmlファイルの

<!--ここから//-->
テキストテキストテキストテキストテキストテキスト
<!--ここまで//-->

という「<!--ここから//-->」の部分と「<!--ここまで//-->」の間にあるテキストを
他のphpファイルからereg_replaceで置換したいのですが可能でしょうか?

可能な場合、上記の範囲指定は正規表現でどう書いたらよいのでしょうか?
0369nobodyさん04/04/20 17:17ID:???
>>368
http://php.s3.to/man/ref.regex.html
http://www.kt.rim.or.jp/~kbk/regex/regex.html#POSIX
0370nobodyさん04/04/20 19:05ID:???
>>369
乙
0371nobodyさん04/04/20 21:41ID:???
>>367みたいな回答はDQN丸出しだな
0372nobodyさん04/04/21 05:52ID:???
>>366
s/(<\w+\s+href\s*=\s*)(['"]?)([^\2\s>]*)\2(\s*>)/$1"$3"$4/gi;
# まんまですな。

>>371
どこらへんがDQNなの?
037336604/04/21 11:47ID:???
>>367,372
ありがとうございます。これから試してみます。
実は367は何やってるかわからないほどの素人ですが
精進します。
0374nobodyさん04/04/21 18:46ID:???
>>372
それに気づけないような頭でこのスレに来るなよ
0375nobodyさん04/04/21 19:43ID:???
>>374
もれも分からんから教えてよ
0376nobodyさん04/04/21 19:47ID:???
隊長、>>371=>>374が必死なスレッドを見つけました!
0377nobodyさん04/04/21 19:55ID:???
>>376
おいおい、もう夏の暑さが近づいているというのにまだ春厨か?
いい加減自演認定は恥ずかしいと思えよ。
俺は面白そうだから便乗しただけ



#って書いてもどうせ煽ってくる春厨だろうけど
0378nobodyさん04/04/21 19:55ID:???
隊長、>>372=>>375=>>376が必死なスレッドを見つけました!
0379nobodyさん04/04/21 20:02ID:???
俺は面白そうだから便乗しただけ
俺は面白そうだから便乗しただけ
俺は面白そうだから便乗しただけ
ワラタ
0380nobodyさん04/04/21 20:34ID:???
>>376=>>378=>>379
一人でお疲れ様

なんか必死さが伝わってくるよ、休めよ
038137204/04/21 20:49ID:???
>>374
hrefと=の間にスペースがあったり、相対アドレスの場合マッチしないからではないですよね?

んー、なんだろう。
038237204/04/21 21:03ID:???
って、煽ってただけなのか。
がっがり。
0383nobodyさん04/04/21 22:05ID:???
↓んじゃ、次の質問どうぞ。
0384nobodyさん04/04/21 22:19ID:???
>>381
いや、それで合ってるんだけどね
0385nobodyさん04/04/21 23:45ID:???
こまった人たちだな
0386 04/04/22 01:57ID:???
>>372
これをPHPで使うにはどう変更すればいいでしょうか?
preg_replace関数を使ってみたのですが、マッチしてくれませんでした。
0387nobodyさん04/04/22 06:41ID:???
>>386
$str = '<a href=http://bbq.2ch.net/bbynews/i/>;速報Headline</a>';
$result = preg_replace('/(<\w+\s+href\s*=\s*)([\'"]?)([^\2\s>]*)\2(\s*>)/i', '$1"$3"$4', $str);

こんなのでいけた。
0388 04/04/22 15:12ID:???
>>387
うまくいきました。ありがとー
条件を " でくくっててマッチしないのを、 ' に変更したらできました。
0389nobodyさん04/04/28 11:02ID:YDy2pcOH
Perl コーディング初心者質問コーナーより誘導されてきました。

sub/test.htmから<n月>という文字列がある行をマッチさせたいのですが、下のようにすると
ローカルではマッチするんですが、サーバーに上げるとマッチしなくなります。

print "content-type: text/html\n\n<html>";
open(TEST, "sub/test.htm");
while (<TEST>) {
if ($_ =~ /<.*?月>/) {print $_;}
}
close(TEST);
print "</html>";
exit;

4行目を
if ($_ =~ /<(.*?)月>/) {print $_;}
に書き換えるとローカルでもサーバー上でもマッチします。なぜでしょうか。
0390nobodyさん04/04/28 13:08ID:???
>>389
「ローカル」と「サーバー」のそれぞれの Perl のバージョンは?
スクリプトと sub/test.htm のそれぞれの文字コードは?
039138904/04/29 02:51ID:SDhjA2B7
>>390
ローカルは5.8.3でサーバーは5.6.1です。
ファイルの文字コードはシフトJISです。
0392nobodyさん04/04/29 02:56ID:AOm5G2zY
プログラムって何が面白いんですか
0393nobodyさん04/04/29 15:34ID:cR/VctPC
適当な文字列<img src="ダブルクォーテーションを含まない文字列">適当な文字列<br>適当な文字列<適当な文字列"適当な<br>文字列

のような文字列に対して、imgタグやbrタグだけ残して、他の<>"'&あたりを文字参照に置換
したいんですが、正規表現一撃でいけますか?
0394nobodyさん04/04/29 15:38ID:???
文字参照って、実体参照のこと言ってるのか?
0395nobodyさん04/04/29 15:46ID:???
あ、そうです。
文字参照→文字実体参照

上の例だと

適当な文字列<img src="ダブルクォーテーションを含まない文字列">適当な文字列<br>適当な文字列&lt;適当な文字列&quot;適当な<br>文字列

となって欲しいのです
0396nobodyさん04/04/29 16:02ID:???
タグ外で&quot;とかまで変換するヤシは意味わかってないね
0397nobodyさん04/04/29 17:45ID:???
>>396
変換しても害は無いと思うが?
0398nobodyさん04/04/29 18:44ID:???
やれやれ、素人はこれだから
0399nobodyさん04/04/29 19:01ID:???
無能な捨て台詞より有能な捨て解説キボンヌ。
0400nobodyさん04/04/29 19:06ID:???
何も分からない素人が何得意気になってるんだか
その程度のことgoogleで調べろよ
0401nobodyさん04/04/29 19:41ID:???
>>400
プッ 必死だな
書き捨てできると思った炉 え? プゲラワラップッ
0402nobodyさん04/04/29 20:14ID:???
>>395=>>397=>>399=>>401
質問者がこんなレベルじゃこのスレも廃れるわけだw
良く分かったよ
0403nobodyさん04/04/29 20:44ID:???
環境
WindowsXP SP1
ActivePerl 5.8.0.806

正規表現でカタカナの「ゼ」を使うとエラーになってしまいます。
カタカナのゼを含む場合だけ「Unmatched [ in regex;」というエラーで止まってしまい、ほかの文字は大丈夫そうなのですが、対処法ありませんか?
if($temp =~ /ゼ/){
色々;
}
0404nobodyさん04/04/29 20:51ID:???
>>389
そんなバカなと思いつつ確認完了。
なぜだろう。

>>393
できるかも知れないけど、プログラム書いたほうが楽だと思う。

>>396
http://www.w3.org/TR/html401/charset.html#h-5.3.2
0405nobodyさん04/04/29 20:59ID:???
>>403
ttp://homepage1.nifty.com/nomenclator/perl/shiftjis.htm

if($temp =~ /\Qゼ\E/){
0406nobodyさん04/04/29 21:11ID:???
>>405
ありがとうございます。
とりあえず意図した動作をするようになりました。
文字コードのせいで [ に認識されていたんですね。
紹介していただいたURLもブックマークしました。
熟読しますね。
0407nobodyさん04/04/29 23:02ID:???
>>393
my $attr = qr/\w+=(?:(?:(')|(")|([^>]))(?:(?(2)[^']*)(?(3)[^"]*)(?(4)[^\s>]*))(?:(?(2)')(?(3)"))\s*)?/;
my $amp = qr/&(?!(?:(?:\#\d+)|(?:\#x[a-f\d]+)|(?:\w+));)/i;
s/(<\/?\w+\s*(?:$attr)*>)|(<)|(>)|(")|($amp)/
$1 and $1 or $5 and '<' or $6 and '>' or $7 and '"' or $8 and '&'
/xge;

Perlで書いてみたけど、どこか穴があるかも。
0408nobodyさん04/04/29 23:05ID:???
> $1 and $1 or $5 and '<' or $6 and '>' or $7 and '"' or $8 and '&'
$1 and $1 or $5 and '&lt;' or $6 and '&gt;' or $7 and '&quot;' or $8 and '&amp;'
0409nobodyさん04/04/30 06:46ID:???
>>404
> http://www.w3.org/TR/html401/charset.html#h-5.3.2

なるほど。では、タグ外で"とかまで変換しても害は無いですね。
041039304/05/03 22:32ID:???
>>407ありがと。
しかし内容を理解しようとしてみたが、いまだわかりません。
簡単なhtmlパーサを作っていて、<br>と<img>はインライン要素で、閉じタグもない
から、他の処理がすべて終わった後に置き換えればいいや、というロジックでした。

よく考えたら、文字列中に実体参照で<>が出てきたとしても、&が&amp;に展開
されるので、いちど実体参照に展開してから、すべての処理が終わった後に、

s/&lt;br&gt;/<br>/i
s/&lt;img src=&quot;([^"<>]*)&quot;&gt;/<img src="$1">/i

これでいけました。

いろいろテストしていたので、反応が遅くてすまんです。
041139304/05/03 22:39ID:???
あ、gオプション書き忘れ。s///giね。

それと、お世話になりましたので、ヘタレの作ったhtmlパーサでも見てやろうかという
方がいるならアプロダにでもソースさらします。
0412nobodyさん04/05/03 23:52ID:???
HTMLパーサ?モジュール使ったらあかんの?Perlでしょ?
041339304/05/04 00:09ID:???
>>412
HTML::Parseモジュールの使い方を理解するのが面倒くさかった
&
掲示板の投稿に特定のタグと属性のみ許可する、文法に従わないタグは
その旨マークしてテキストとして表示する、という限定的用途なので、自作
のほうが汎用モジュールより高速だと思った
&
Perlと正規表現の勉強のため

て、感じで。
0414nobodyさん04/05/04 01:54ID:???
ま、車輪の再発明は勉強には有用だが、
実用には不向きなので。
0415nobodyさん04/05/05 18:30ID:???
荒らし板は通報せよ!荒らし狩りだっ!
名無しさん@ゴーゴーゴーゴー! :04/04/14 17:58 ID:WE3vDaf0
 愛と荒らしの掲示板:http://bbs2.otd.co.jp/16588/bbs_plain
が痛い。荒らし依頼すっと、IPアドレス晒される
 依頼か (?)要注意。あまりの痛さにPCを殴りたくなった。

今度は「愛と臨時の掲示板」だってさ!痛すぎる馬鹿だな!
http://bbs10.otd.co.jp/286214/bbs_plain
逃げても無駄だぜ!ゲロ!!つーかお前馬鹿?
卑怯者!逃げるなよ、潜伏中か?

愛と荒らしの掲示板(逃亡先):http://bbs10.otd.co.jp/286214/bbs_plain
0416未承諾広告※ ◆TWARamEjuA 04/05/05 18:55ID:???
Rock54 対象の悪寒。
0417nobodyさん04/05/06 22:18ID:???

/^0?[0-3]?[0-7]{1,2}$/ってどんな意味ですか?
0418nobodyさん04/05/06 23:08ID:???
そのまんまだと思うのだが。
0419nobodyさん04/05/07 00:17ID:???
0377までの8進数
0420nobodyさん04/05/09 00:57ID:R8gJ7rV0
perlをシフトJISで書いてるんですが、「表」とかの文字化けする文字を正規表現でマッチングさせる
にはどうしたらいいでしょうか。

$_ =~ s/表/表\/g;

みたいなことをしたいんですが上記の場合「表」のコードが(95 5C)なのでエラーに
なってしまいます。コードのまま検索かけてもうまくいきませんでしたし

$_ =~ s/95 5C/95 5C 5C/g;

どうすれば「表」という一文字を検索に引っ掛ける事ができるでしょうか?
042142004/05/09 01:29ID:???
色々試していたら、デコードした後に下記のやり方で一応できたのですが、
$_ =~ s/\x95/表\/g;

でも\x95だけでは他の文字にも影響が出てしまいますよね。それで
$_ =~ s/\x95\x5C/g;
としてみましたがこれではマッチしてくれませんでした。どうすればいいでしょうか。
0422nobodyさん04/05/09 01:45ID:???
要は文字化けしないようにエスケープしたいんじゃろ?
出力だけでなく処理もSJISでやってるなら展開しないように工夫すれ
0423nobodyさん04/05/09 02:02ID:???
つか、内部処理はEUCでやれよと
042442004/05/09 02:08ID:???
>>422
はい。フォームに入力してもらった文字列をオウム返しに次のページに出力したり
内容をsendmailで送ったりの時に文字化けが起こらないようにしたいんです。

ところで、みんなはクエリは受け取ったらeucに変換して処理をした後、出力時にsjis
に変換しているのですか?

プラットフォームがwinならsjisで、unixならeucに変換して扱うみたいな事を聞いたの
ですが、winでも処理時はeucで出力の時にsjisに変換すれば大丈夫なんでしょうか?

0425nobodyさん04/05/09 02:16ID:???
>>420
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0426nobodyさん04/05/09 02:18ID:???
>>424
HTMLをEUCで書く
PerlCGIをEUCで書く

「表」とかで悩んだことは一度も無し。
ほんとみんな無駄な苦労してるなあと思ってる。


HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。
(変換時にはちゃんとincode=sjisを付ける)
042742004/05/09 02:39ID:???
みなさんありがとうございます。今までずっとメモ帳でやってたので、perlもhtml
も自動的にShift_JISで書いてました。何かエディタを使おうと思いますが、色付けもなく
特定文字が太字にもならない、メモ帳と違うのは漢字コード指定で再読み込みができる
っていう感じのはないんですかね。一応terapadは持ってるんですが、色はよくても
太字になるし、たまに挿入モードから勝手に上書きモードになっちゃうしで、使いづらいんですよね。


>>426
>HTMLがShift_JIS指定されてたら、最初にEUCに変換してから処理してる。
ここらへんが不安だったのでeucで書くのをためらってるのですが、htmlやperlを書くときに
エディタを使ってeucで書くと、ブラウザ側がシフトJISの時に文字化けしますよね?
〜最初にeucに変換してから処理する〜の意味が理解できなくて・・・

>>425のサイトとperlメモを流し気味で読みましたが、ちゃんと読めば上記についても
解説されてるのでしょうか?

とりあえずお腹が空いたので、お茶漬けでも食べます。
■ このスレッドは過去ログ倉庫に格納されています