5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

正規表現道場@2ch

1 :ヽ(´▽`)ノ:2001/07/26(木) 09:03 ID:???
以外と毛嫌いして居る人も多そうな正規表現、
でもperlを使いのなす上で避けて通れない道だったりするかもです。
そこで、スクラップブック的に目に止まったカッコイイ正規表現を
書き留めておこうと言うスレッドです。
質問する時は言語と、得たい結果をなるべく詳しく書いてね。

取り合えず僕が知ってる有用なリンクです。
http://www.din.or.jp/~ohzaki/perl.htm
http://www.kt.rim.or.jp/~kbk/regex/regex.html

もっとイイ(・∀・) リンクは>>2-10さん辺りが書いてくれるカモ・・・・

2 :名無しさん@お腹いっぱい。:2001/07/26(木) 09:13 ID:YXyw6YTU
名スレの予感…。
期待age

3 :_gunzip:2001/07/26(木) 09:16 ID:???
http://www.cc.rim.or.jp/~midorin/mad-p/RegexDiagram.html
http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/PRC2kRegex/
この辺りも参考になるかな。

4 :名無しさん@お腹いっぱい。:2001/07/26(木) 12:33 ID:???
名スレへの期待・・・。

5 :加奈子:2001/07/26(木) 15:30 ID:???
うふん♪うふふ♪
わたしの魔法で名スレにしちゃうわよん♪(らぶらぶはぁと)

素晴らしい正規表現教えてね♪
すっご〜いの書いてくれた坊やには、ご褒美として
お姉さんが、やさ〜しく、童貞を奪って・ア・ゲ・ル・わよん♪うふ★(はぁと)

6 :名無しさん@お腹いっぱい。:2001/07/26(木) 16:42 ID:???
foreach (@女友達) {
($輪郭,$目,$鼻,$口,$性格,$髪型,$マンコの臭さ,$締まり,$喘ぎ声) = split(/\t/, $_);

if ($目 =~ /ひとえ/) {
exit;
exit;
exit;
exit;
exit;
exit;
exit;
exit;
exit;
exit;
exit;
exit;
exit;
exit;
exit;
}
}

7 :6:2001/07/26(木) 16:45 ID:???
1人目が一重だったら素敵な出会いを逃してしまう・・・鬱だ逝ってくる

8 :初心者用:2001/07/26(木) 18:38 ID:rraA5UWo
$hoge = 'ababab';

$hoge =~ s/ab/abab/g;

while( s/ab/abab/ ){}
のヤヴァイ違いを理解すべし。

9 :名無しさん@お腹いっぱい。:2001/07/26(木) 20:42 ID:???
>>8
それじゃ動かないだろ。

10 :名無しさん@お腹いっぱい。:2001/07/27(金) 00:07 ID:M7QCgAvY
有限オートマンコ

11 :名無しさん@お腹いっぱい。:2001/07/27(金) 00:40 ID:???
1の

もっとイイ(・∀・) リンクは>>2-10さん辺りが書いてくれるカモ・・・・

という願いはほぼ崩れ去ったな。気の毒に…

12 :名無しさん@お腹いっぱい。 :2001/07/27(金) 06:26 ID:???
わははは まぁ良いじゃんまったりいこうや
$hoge =~ s/</</;

13 :名無しさん@お腹いっぱい。:2001/07/27(金) 10:34 ID:???
>>12 ??

14 :名無しさん@お腹いっぱい。:2001/07/27(金) 16:33 ID:???
@hoge = m/([0-9a-zA-Z.\-_]{3,20}\@[0-9a-zA-Z.\-_]{5,})/;

15 :名無しさん@お腹いっぱい。:2001/07/27(金) 17:43 ID:9sLGF54Q
$strings = m/
\s+ | # Space
[\x21-\x7E]+ | # Latin
(?:[\xA1-\xA2][\x00-\xFF])+ | # Symbol
(?:\xA3[\x00-\xFF])+ | # Eisuu
(?:\xA4[\x00-\xFF]|\xA1\xBC)+ | # Hiragana
(?:\xA5[\x00-\xFF]|\xA1\xBC)+ | # Katakana
(?:\xA6[\x00-\xFF])+ | # Greek
(?:\xA7[\x00-\xFF])+ | # Russian
(?:\xA8[\x00-\xFF])+ | # Keisen
(?:[\xB0-\xF4][\x00-\xFF])+ | # Kanji
. # Other
/gx;

EUC-JPの文字列から漢字、平仮名、カタカナ、アルファベットの文字列をブリブリ切り分ける
from perl-oo

16 :名無しさん。:2001/07/27(金) 18:45 ID:OFQPU1uA
shift_jisの日本語にマッチさせるには?

17 :名無しさん@お腹いっぱい。:2001/07/27(金) 22:53 ID:???
>>13
$hoge =~ s/</&lt;/;
と書きたかったのだと思われ

18 :名無しさん@お腹いっぱい。:2001/07/29(日) 13:17 ID:???
$hoge =~ s/クソスレ/良スレ/g;

19 :名無しさん@お腹いっぱい。:2001/07/29(日) 15:06 ID:???
>>18
気持ちはわかる。願望だ。(w

20 :出題君@fushianasan:2001/07/29(日) 15:47 ID:hCDIdcLQ
出題
マッタリ、セックス、オナニー を
マターリ、セクース、オナーニ に換える

21 :名無しさん@お腹いっぱい。:2001/07/29(日) 18:16 ID:???
$hoge =~ s/>>20の出題センス//g;

22 :名無しさん@お腹いっぱい。:2001/07/29(日) 23:15 ID:1COkoXYs
PerlでHTMLからリンク抜き出すの教えてくだされ。 重複無しで整列して表示したりするのきぼー。
下のは練習に書いてみたやつ。 なぜか最後のprintでコンパイルエラー出まする。

study $html;
$pattern = '<A href="([^"]+)">';
while ( $html =~ /$pattern/is ) {
 $html =~ s/$pattern//is;
 push( @_, $1 );
 print "$1\n";
}
#print "$_\n" foreach(@_);

23 ::2001/07/30(月) 00:50 ID:tCdJa/Mc
$body =~ s/(<[^>]*\bhref\s*=\s*["']?)([^\s"'>]*)/$1.&url_extract($2)/gie;
foreach (sort keys %URL) {print "$_\n";}
.
.
.
sub url_extract {
my($href) = shift;
$URL{$href}++;
return $href;
}

某スクリプトの一部を拝借
経験上,マッチするごとにサブルーチンに渡した方が早く感じます(何故?

http://schwarzekatz.hypermart.net/test.cgi

そーす
http://schwarzekatz.hypermart.net/test.txt

24 :名無しさん@お腹いっぱい。:2001/07/30(月) 01:06 ID:???
>>22

#!/usr/bin/perl

use strict;
use HTML::LinkExtor;

my $p = new HTML::LinkExtor;

$p->parse(<<HTML);

HTML

my %link_set;
foreach my $l ($p->links ) {
my ($tag, %link) = @$l;
next if $tag ne 'a';

++$link_set{$link{href}} if exists $link{href};
}

foreach my $link (sort keys %link_set) {
print $link, "\n";
}

__END__

> $pattern = '<A href="([^"]+)">';
> while ( $html =~ /$pattern/is )
> $html =~ s/$pattern//is;

+o

25 :22:2001/07/30(月) 02:15 ID:???
>>23, >>24
 置き換えする時にサブルーチン呼んだり、ハッシュ使ったり、モジュール使ったりと
いろんな技があるんですね。勉強になりますた。
 大きなのに固定正規表現使う時はoを使うことにします。
 感謝。

26 :棺@マターリ週間:2001/07/31(火) 00:34 ID:???
>>24

わたすもべんきょうになりますた。感謝ヽ(´ー`)ノ

27 :名無しさん@お腹いっぱい。:2001/08/02(木) 14:18 ID:???
えっと、ここは質問してもいいんですよね?
激しく定番なのかもしれませんが、

<FOO>
hogehogehogehoge
hogehogehogehoge
hogehogehogehoge
hogehogehogehoge
</FOO>

のパターンようにある文字列Aと文字列Bに*囲まれた部分*
を表す正規表現の王道というのはどんなもんなんでしょうか

なんかやるたびにうまくいったりいかなかったりしてるんで
定番パターンというのがあれば知りたいです。

厨房くさくてスミマセソ

28 :JAPU@ほえほえ:2001/08/02(木) 14:44 ID:???
m[<FOO>.*?</FOO>]s では?

29 :名無しさん@お腹いっぱい。:2001/08/02(木) 14:54 ID:???
>>28
はぁ。やっぱ普通そうですよね。。。
ってsオプション?
知らない…調べてきます。

レスさんくすです。

30 :27:2001/08/02(木) 14:56 ID:???
29=27でした。
ちなみにJAPUタンとタメ歳なのです…。
この違いは…

31 :27:2001/08/02(木) 15:00 ID:???
>>28
おおお!なるほど。s,m。こんなのがあったんですね。
よさげです。試してみます。ありがとうございます。

32 :JAPU@スクルド萌え:2001/08/02(木) 15:35 ID:???
通常 "." は [^\n] と等価ですが、"s" 修飾子を付けると "\n" にもマッチするようになりますにゃん。
この辺の説明はらくだ本だとちょっと不親切な気がする。

$_ = "\n\n";
print "moe\n" if /../;
print "hoe\n" if /../s;

>>27
たまたま この分野で、少しだけ詳しいだけなので、
あまり気にしていてはダメよん。

33 :名無しさん@お腹いっぱい。:2001/08/02(木) 15:51 ID:???
良スレ認定します

34 :名無しさん@お腹いっぱい。:2001/08/02(木) 16:11 ID:???
&kaere if ( $人間 =~ /^チャンコロ/i );

35 :名無しさん@お腹いっぱい。:2001/08/04(土) 00:26 ID:b7KA9zTo
みんな、諸説正規表現は、読んでる?

36 :名無しさん@お腹いっぱい。:2001/08/04(土) 02:38 ID:???
>>22
面白そうなので、自分も作ってみた。
でも、ちょっとしか、テストしてない。
バグでたら、ゴメン。

#!/Perl/bin/MSWin32-x86-object/jperl -w
use strict;

undef $/;

while(<>){
my @urls = m/<a href\s*="(.*?)".*?\/a>/isg;#get url

@urls =sort @urls;#sort

my $prev = 'nonesuch';#uniqu(faqのコード、コピペ)
@urls = grep($_ ne $prev && ($prev = $_), @urls);

print "\n\n -----$ARGV------\n\n" ;
print join("\n",@urls);
}

37 :初期不良:2001/08/06(月) 01:45 ID:VQtSpJpE
>>28
類似性相似性を見るとむずむずするので
後方参照の例題的なものを利用。

for('FOO', 'BAA'){
 m[<($_)>(.*?)</\1>]s;
 $data{$_} = $2;
}

スレ違いだけどみんな foreach ってわざわざ書くの?
俺は for でいいって聞いてからずっと for なんだが...
わかりにくかったりするかな。

38 :名無しさん@お腹いっぱい。:2001/08/06(月) 02:38 ID:???
普通はforeach、短いスクリプトだとfor
#foreachは長くて目立つので

39 :名無しさん@お腹いっぱい。:2001/08/06(月) 11:48 ID:Ij2f2Gkc
oオプション使うと、
mod_perlや、speedycgiで前のパターンが残ってしまいますが、
これの回避方法ってありますか?

40 :名無しさん@お腹いっぱい。:2001/08/06(月) 12:27 ID:???
>>39
oオプションを使わない
っつか正規表現とは関係ないと思うのだが?
>>38もな

41 :名無しさん@お腹いっぱい。:2001/08/06(月) 16:43 ID:???
>>40
死きり屋uZeeeeee

42 :名無しさん@お腹いっぱい。:2001/08/06(月) 21:20 ID:???
>>41
オマエモナー

43 :名無しさん@お腹いっぱい。:2001/08/12(日) 14:24 ID:???
gオプションでパターンマッチングした際にマッチングした回数が入っている
特殊変数は有りませんか? "$&"がマッチングした文字列みたいなんですが・・・・
本にも $` $' 辺りしか載っていないのです。
他の方法でも大丈夫なのですが、前に何かで見た気がして必死でさがしてる
のですが、見つからないのです  (汁;;
気のせいだったのかなぁ・・・・

44 :名無しさん@お腹いっぱい。:2001/08/12(日) 14:38 ID:???
my $tmp = "pattern";
my $count = ($tmp =~ s/t/T/g);
print "$count 個の t を T に置換しました\n";

こんな感じ?

45 :43:2001/08/12(日) 15:23 ID:???
ええっ、、何ですかこれは @_@!!
聞いてみるものだなぁ。。。勉強になりますぅ
今までtでsplitして要素数をみてた馬鹿なおいら  ^^
>>44  ありがとう、もっと精進します

46 :名無しさん@お腹いっぱい。:2001/08/20(月) 06:59 ID:???
優良スレage
ついでに前に掲示板スレかどっかにあった荒らし制限を載せてみる。
アヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャ
s/(...+?)\1\1+/$1$1$1/;
アヒャヒャヒャヒャヒャヒャ

47 :名無しさん@お腹いっぱい。:2001/08/20(月) 10:32 ID:???
オプションじゃなくて修飾子ねsage

48 :名無しさん@お腹いっぱい。:2001/08/20(月) 11:07 ID:???
>>43
ちゃんとした解説本を読んでみよう、ちゃんとのってるよ

49 :名無しさん@お腹いっぱい。:2001/08/21(火) 02:46 ID:Tv58Rzyg
>>46 最初のしかできないじゃん。
アヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャオヒョヒョヒョヒョヒョヒョヒョヒョヒョヒョヒョヒョヒョヒョヒョヒョヒョヒョ
$char = 2; $repeat = 3;
s/(.{$char,}?)\1{$repeat,}/$1x$repeat/eg;
アヒャヒャヒャオヒョヒョヒョ

50 :名無しさん@お腹いっぱい。:2001/08/22(水) 03:34 ID:zNoLcpmA
まずオライリーの正規表現本買ってみ
目からウロコ

51 :名無しさん@お腹いっぱい。:2001/08/22(水) 17:41 ID:B/pBRo0o
>>50
禿同!
鱗どころか、鎧が落ちた気がした。

52 :名無しさん@お腹いっぱい。:2001/08/22(水) 17:44 ID:???
>>50
ふくろう本ってやつですか?
買って見ようかな、、オークに嵌っている今日この頃 (^_^;

53 :名無しさん@お腹いっぱい。:2001/08/25(土) 13:20 ID:???
age

54 :名無しさん@お腹いっぱい。 :01/09/01 00:11 ID:EyspkUdI
良スレあげ、、前に結構マニアックなWEBがあったんだけど
見失っちゃったよ。
sedとかも載ってて薄緑のページ。
確かorgドメインだったかな、、面白いサイトは無いかなー

55 :名無しさん@お腹いっぱい。:01/09/03 23:49 ID:kJGORBzs
なんちゃってプログラマーです。

たとえば

$Form{comment} =~ s/くそ/●●/g;

とすれば「くそ」と書き込んだコメントを伏字にできますがこれだと
「へたくそ」も「へた●●」となってしまいます。文節に応じた
文字変換(伏字処理みたいなこと)ってどうすればいいんでしょうか。

既出事項であったらすみません。

56 :名無しさん@お腹いっぱい。:01/09/04 02:02 ID:lxASoDUY
PHPで、strlen($text)とやると、テキスト名のバイト数が返されるくせに
require($text)とやると中味のバイト数が返されるのはなぜだ?
教えろ。

57 :名無しさん@お腹いっぱい。:01/09/04 23:35 ID:hpdQ0NnY
>>55
なにをどうしたいのさ。
伏せ字でも少し載せて,伏せたいのと伏せたくないのも
載せたほうが答えもらえると思われ。

58 :名無しさん@お腹いっぱい。:01/09/05 21:06 ID:zThM7aIk
$input = $ARGV[0];
$input =~ s/([.]*)/-----$1-----/; #inputを-----で囲みたいです
print "$input\n";
ってやって、、
$.test.pl 111{}222{}333
ってやると
----------111{}222{}333
こうなります、
-----111{}222{}333-----
何故こうならないのでしょうか、
と言うか目的からは程遠い所なんですが、多分バックトラッキングが理解
出来てないからだと思うのですが。
絶対僕の思ったように動かないに決まってます。

59 :名無しさん@お腹いっぱい。:01/09/05 21:15 ID:ongErcHE
>>58

$input =~s/(.*)/--------$1---------/;


てゆーか囲むだけなら

$input = '--------' . $input . '---------';

で良いべさ

60 :名無しさん@お腹いっぱい。:01/09/05 21:27 ID:zThM7aIk
ありがとうです、
えと、それはそうなんですが正規表現の勉強と言う事で (^^
ちなみにevalして
$input =~ s/([.]*)/'-----'.$1.'-----'/e;
こんな風にしても結果は同じなんです。
何か一歩も前に進めない感じで   とほほ

61 :名無しさん@お腹いっぱい。:01/09/05 22:13 ID:L1KgWH9s
>60
59が答を書いてるだろがゴルァ
.を[]の中に入れたら任意の1文字じゃねーぞゴルァ

62 :名無しさん@お腹いっぱい。:01/09/05 22:37 ID:mJCW7B8k
>>60
とほほつながりでここでも見て勉強すれ。
http://tohoho.wakusei.ne.jp/wwwperl1.htm#Expr

63 :名無しさん@お腹いっぱい。:01/09/06 01:36 ID:ji/LQ9h6
ありがとう! 、何だかスレのレベルを一気に下げちゃったみたい
ですけど、 (^^;
しかし上手く動いてくれないんだよなぁ・・・
詳説正規表現って言うのは難しすぎるし
とほほに逝って来ますぅ

64 :名無しさん@お腹いっぱい。:01/09/06 01:55 ID:Ut37ZYfk
みんな*つかってるけど
(.*)じゃなくて(.+)じゃないの?

65 :名無しさん@お腹いっぱい。:01/09/06 02:02 ID:jxYvqj8.
>>64
場合による

66 :名無しさん@お腹いっぱい。:01/09/06 02:07 ID:Ut37ZYfk
>>65
(.*)って,どんな時に使うんですか?
文字に反応しない時がありそうなんで,まったく想像がつかないんですが。

67 :名無しさん@お腹いっぱい。:01/09/06 06:20 ID:sO/Rg6CI
梅干し食べて酸っぱい時。

68 :名無しさん@お腹いっぱい。:01/09/06 06:30 ID:jxYvqj8.
>>66

>>62のリンク先ぐらい見てから聞け。

69 :名無しさん@お腹いっぱい。:01/09/08 10:24 ID:???
(*^o^*)

70 :名無しさん@お腹いっぱい。:01/09/08 13:08 ID:Lvui7oF6
今日の勉強のおと

正規表現の特殊文字 9連発

. (どっと)
*(アスタリスク)
+(ぷらす)
?(くえすちょん)
[(れふとすくえあ
](らいとすくえあ
`(ばっくくおと
$(だら
\(ばくすらしゅ

71 :名無しさん@お腹いっぱい。:01/09/08 19:26 ID:???
>70
 大昔backslashをもじった「バクスラ」ってphotonのチームがありましたなぁ

 ちなみに「{」「}」と「<」「>」はどう読んでます?

72 :名無しさん@お腹いっぱい。:01/09/08 19:47 ID:Lvui7oF6
れふとかーりーぶらんけっと {
らいとかーりーぶらんけっと }
れふとぱーれん (
らいとぱーれん )

73 :名無しさん@お腹いっぱい。:01/09/09 14:29 ID:NSJpQxzQ
 ○
□+/
 大

どらごんくえすと

74 :名無しさん@お腹いっぱい。:01/09/09 20:23 ID:???
>72
 どもでした:-)

>73
 ワラタ(笑)

75 :名無しさん@お腹いっぱい。:01/09/11 12:31 ID:StTUkJnk
任意の2文字以上続く文字
例えば

************************
とか

■■■■■■■■■■■■
とか



****

■■■■

とか短くする正規表現教えてくなさい

76 :名無しさん@お腹いっぱい。:01/09/11 12:41 ID:???
>>75 >>1のリンクぐらい見てから聞け。

#! perl

$str = '■■■■■■■■■■■■';
$str =~s/(?:■){2,}/■■/;

print $str;

77 :名無しさん@お腹いっぱい。:01/09/11 18:42 ID:WwJLyJnk
perlって奥深い

78 :petronius:01/09/11 20:22 ID:???
>>76
「任意の」2文字以上続く文字だろ?
$str =~ s/(.)\1+/$1/g;

79 :petronius:01/09/11 20:27 ID:???
ああ、■とかのときは $str =~ s/(..)\1+/$1/g; に変えてね。
しかし、これじゃ任意じゃないな。スマソ。

80 :名無しさん@お腹いっぱい。:01/09/11 21:34 ID:???
じゃあファイナルアンサー

$str =~ s/(.|..)\1+/$1$1/g;

81 :名無しさん@お腹いっぱい。:01/09/12 02:40 ID:???
ドロップアウト

82 :名無しさん@お腹いっぱい。:01/09/24 10:09 ID:???
変なスレばっかなので上げっ
詳説買ってきたよ〜 でも難しい  (鬱

83 :名無しさん@お腹いっぱい。:01/09/25 05:55 ID:I2K.uRSs
英単語の先頭の文字だけを大文字に変換する方法があったら教えてくだされ。
this is a pen

This Is A Pen
とかにしたいの。よろしく〜。

84 :JAPU@CGI関連のコンテンツは移動した...:01/09/25 06:16 ID:???
$hoe = join " ", map { ucfirst } split /\s+/, $moe;
...と思ったけど、正規表現スレッドなので、
s/(?<!\S)(.)/uc $1/eg;
としておこう。:-)

# 詳説正規表現は難しいね。

85 :名無しさん@お腹いっぱい。:01/09/25 12:35 ID:???
>>83

別解で

s/(\w+)/ucfirst $1/eg;

86 :名無しさん@お腹いっぱい。:01/09/26 00:14 ID:???
s/\b(\w+)\b/\u$1/g

87 :名無しさん@お腹いっぱい。:01/10/04 15:47 ID:KFx.YrhY
あのお、教えてください。
正規表現でShift_JISの半角カナを全角カナに変換することは
できますでしょうか。
ちなみに最初は下記のようなのを書いてみたけど、Shift_JISの下位バイトに
半角カナに一致するコードが含まれることがあって失敗しました。

%han2zen = ( 'ア'=>'ア', …以下半角=>全角の対応 );
my $re_hankana = '[。-゚]';
my $re_dakuten = '[゙゚]';

#成功例
my $good = "(゚Д゚)ハァ?(゚Д゚)ハァ?";
$good =~ s/($re_hankana$re_dakuten?)/$han2zen{$1}/g;
print "$good\n";

#失敗例
my $bad = "(゚Д゚)ほげ?(゚Д゚)ほげ?";
$bad =~ s/($re_hankana$re_dakuten?)/$han2zen{$1}/g;
print "$bad\n";

88 :87:01/10/04 15:51 ID:???
上の検証用に半角全角対応ハッシュも書いときます。

my %han2zen = (
'。'=>'。', '「'=>'「', '」'=>'」', '、'=>'、', '・'=>'・', 'ヲ'=>'ヲ', 'ァ'=>'ァ',
'ィ'=>'ィ', 'ゥ'=>'ゥ', 'ェ'=>'ェ', 'ォ'=>'ォ', 'ャ'=>'ャ', 'ュ'=>'ュ', 'ョ'=>'ョ',
'ッ'=>'ッ', 'ー'=>'ー', 'ア'=>'ア', 'イ'=>'イ', 'ウ'=>'ウ', 'エ'=>'エ', 'オ'=>'オ',
'カ'=>'カ', 'キ'=>'キ', 'ク'=>'ク', 'ケ'=>'ケ', 'コ'=>'コ', 'サ'=>'サ', 'シ'=>'シ',
'ス'=>'ス', 'セ'=>'セ', 'ソ'=>'ソ\','タ'=>'タ', 'チ'=>'チ', 'ツ'=>'ツ', 'テ'=>'テ',
'ト'=>'ト', 'ナ'=>'ナ', 'ニ'=>'ニ', 'ヌ'=>'ヌ', 'ネ'=>'ネ', 'ノ'=>'ノ', 'ハ'=>'ハ',
'ヒ'=>'ヒ', 'フ'=>'フ', 'ヘ'=>'ヘ', 'ホ'=>'ホ', 'マ'=>'マ', 'ミ'=>'ミ', 'ム'=>'ム',
'メ'=>'メ', 'モ'=>'モ', 'ヤ'=>'ヤ', 'ユ'=>'ユ', 'ヨ'=>'ヨ', 'ラ'=>'ラ', 'リ'=>'リ',
'ル'=>'ル', 'レ'=>'レ', 'ロ'=>'ロ', 'ワ'=>'ワ', 'ン'=>'ン', '゙'=>'゛', '゚'=>'゜',
'ガ'=>'ガ', 'ギ'=>'ギ', 'グ'=>'グ', 'ゲ'=>'ゲ', 'ゴ'=>'ゴ',
'ザ'=>'ザ', 'ジ'=>'ジ', 'ズ'=>'ズ', 'ゼ'=>'ゼ', 'ゾ'=>'ゾ',
'ダ'=>'ダ', 'ヂ'=>'ヂ', 'ヅ'=>'ヅ', 'デ'=>'デ', 'ド'=>'ド',
'バ'=>'バ', 'ビ'=>'ビ', 'ブ'=>'ブ', 'ベ'=>'ベ', 'ボ'=>'ボ',
'パ'=>'パ', 'ピ'=>'ピ', 'プ'=>'プ', 'ペ'=>'ペ', 'ポ'=>'ポ',
);

89 :名無しさん@お腹いっぱい。:01/10/04 17:00 ID:???
>>87
jcodeじゃだめか?
ってここは正規表現スレだな

90 :名無しさん@お腹いっぱい。:01/10/04 22:34 ID:a.Dq8AyI

$hoge =~ s/([\x81-\x9F][\x40-\x7E]|[\xE0-\xEF][\x80-\xFC]|[\xA1-\xDF]|.)/$han2zen{$1} or $1/egs;

いつも通りこう書いたんだけど、$bad はやっぱり上手くいかない。
縦棒って最初にマッチした奴にマッチして終わりじゃなかったっけ?
誰か教えてくれ。

91 :名無しさん@お腹いっぱい。:01/10/05 04:22 ID:???
>>90
>縦棒って最初にマッチした奴にマッチして終わり
そうだよ。
うえのやつは全角相当のパターンが違うんでないの。
見やすくするためスペース入れると、

×( [\x81-\x9F][\x40-\x7E] | [\xE0-\xEF][\x80-\xFC] | [\xA1-\xDF] | . )
○( [\x81-\x9F\xE0-\xEF][\x40-\x7E\x80-\xFC] | [\xA1-\xDF] | . )

だと思う。少なくとも$badはこれでいけた。

92 :90:01/10/05 20:50 ID:???
>>91
ああそうかぁ。サンクス。
http://ash.or.jp/ash/tips_prog/htm/code.htm
ココみてパターン書いたんだけど、見方間違えてたよ。

そういえば最後のドットは要らないかな、と思った。

93 :87:01/10/07 17:56 ID:G6cvoZz6
>>89-92
ありがとー。

94 :87:01/10/07 18:28 ID:???
まとめ。Shift_JISの半角カナを全角に変換。
my %han2zen = { >>88参照 };
my $re_zen = '[\x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc]'; # 全角
my $re_han = '[\xa1-\xdf]'; # 半角カナ
my $re_dak = '[\xde\xdf]'; # 半角の濁点と半濁点

my $s = "(゚д゚)ウマー(゚Д゚)げ?";
$s =~ s/($re_zen|$re_han$re_dak?)/$han2zen{$1} or $1/ge;
print "$s\n";

95 :87:01/10/07 18:42 ID:???
う。>>94だと"マ゙"が変換されずに残っちゃうです。
>>89-92の人の責任じゃなくて俺のせいっす。鬱だ。。。

96 :87:01/10/08 01:19 ID:???
よし!これで大丈夫。たぶん。。きっと。。。

# Shift_JISの半角カナを全角に変換する
my %han2zen = { >>88, 'ヴ'=>'ヴ' } # 88のに1コ追加
my $re_zen = '[\x81-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc]'; # 全角
my $re_han = '[\xa1-\xdf]'; # 半角カナ
my $re_dak = '[\xb3\xb6-\xc4\xca-\xce]\xde'; # 半角カナ濁点
my $re_hdak = '[\xca-\xce]\xdf'; # 半角カナ半濁点

my $s = "(゚д゚)ヴマ゙ー(゚Д゚)げ?";
$s =~ s/($re_zen|$re_dak|$re_hdak|$re_han)/$han2zen{$1} or $1/ge;
print "$s\n";

97 :名無しさん@お腹いっぱい。:01/10/10 00:05 ID:???
apacheで、
ttp://hogehoge/cg\img.jpg
を↓にリダイレクトしたい。
ttp://hogehoge/cg/img.jpg

しかし↓これだと動かない。
RedirectMatch ^/([^\?]*)\\(.*)$ /$1/$2
なぜだか判る?

98 :名無しさん@お腹いっぱい。:01/10/10 00:06 ID:???
pathに\はおかしいのでは?

99 :名無しさん@お腹いっぱい。:01/10/10 00:09 ID:???
>>98
しかしIEだとちゃんと表示できるからユーザーは気が付かずに使っちゃうのよ。
他の正常なブラウザだと404になるからリダイレクトしたいの。

100 :90:01/10/10 01:00 ID:???
mod_rewriteでの記法はよく知らんけど、
最初の ^/ は、 / にしないと駄目でない?

101 :90:01/10/10 01:04 ID:???
mod_rewriteじゃなかった(恥

102 :名無しさん@お腹いっぱい。:01/10/10 01:54 ID:???
良く調べた! SIFT_JIS決め撃ちの所で使えるね (・∀・)♪

103 :97:01/10/10 21:41 ID:???
>>97
RedirectMatch ^/([^\?]*)\\\(.*)$ /$1/$2
なんか知らぬが解決した。

104 : :01/10/12 01:11 ID:???
$http_URL_regex=「URLの正規表現」(長いので割愛)

として、掲示板スクリプトの書き込みの中にあるURLに
こうやって自動リンク貼ってる。↓

$data =~ s/($http_URL_regex)/<a href="$1">$1<\/a>/go;

現状だと
http://www.test.com/dir/index.html が
<a href="http://www.test.com/dir/index.html>http://www.test.com/dir/index.html</a> に
置き換わるだけだけど、URL表示の/(スラッシュ)を「<wbr>/」に
置き換えるようにしたい。

具体的には、上の例でいうと
<a href="http://www.test.com/dir/index.html>http://www.test.com<wbr>/dir<wbr>/index.html</a>
って感じにしたい。

一行が長くてゴメソ。分かる人教えて。

105 :名無しさん@お腹いっぱい。:01/10/12 02:04 ID:???
>>104
分かるもなにも、その$http_URL_regexってやつを
見せてもらわんと。そんなに長いんか?
も、もしかして、大崎氏の「Perlメモ」にある
ものすごい正規表現のことかな。。。

106 :名無しさん@お腹いっぱい。:01/10/12 02:04 ID:???
>>104
$data =~ s/($http_URL_regex)/&convurl($1)/ge;
sub convurl {
my($url) = shift;
my($str) = qq{<a href="$url">};
$url =~ s|(?<!/)/(?!/)|<wbr>/|g;
$str .= qq{$url</a>};
}

こんなんしか思いつかんダサ

107 :104:01/10/12 09:48 ID:???
>>105
bingo...
http://www.din.or.jp/~ohzaki/perl.htm#httpURL
にあるやつです。

>>106
うまくいった!ありがとう!

108 :名無しさん@お腹いっぱい。:01/10/12 12:46 ID:???
<a href="http://www.test.com/dir/index.html>http://www.test.com<wbr>/dir<wbr>/index.html</a>
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
リンク張るならここまでだろ。2chださい。

109 :名無しさん@お腹いっぱい。:01/10/12 13:13 ID:???
ちょいテスト

quoteなし
<a href=http://hoge.com/hoge.html>http://hoge.com<wbr>/hoge.html</a>

quoteあり
<a href="http://hoge.com/hoge.html">http://hoge.com<wbr>/hoge.html</a>

quote閉じ忘れ
<a href="http://hoge.com/hoge.html>http://hoge.com<wbr>/hoge.html</a>

110 :109:01/10/12 13:15 ID:???
>>108 禿しく同意!

111 : :01/10/15 01:18 ID:???


112 :名無しさん@お腹いっぱい。:01/10/15 01:29 ID:???
>>108,109=馬鹿

113 :名無しさん@お腹いっぱい。:01/10/15 06:28 ID:???
>>112
その心は「クォート閉じ忘れやクォートなしは不正なのに、
それに対応していない2chを批判するのは馬鹿」という理解でよいですか。

114 :名無しさん@お腹いっぱい。:01/10/15 08:08 ID:???
不正じゃなくても間違えますが何か?
<a href="http://example.com/">http://example.com/</a>
ということでお題。
&は含むけど&lt;や&gt;は含まないように
リンクを張る正規表現は?

115 :名無しさん@お腹いっぱい。:01/10/15 08:11 ID:???
ちなみに現行はこう。
$message =~ s/(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"$1\:$2\" target=\"_blank\">$1\:$2<\/a>/ig;

116 :113:01/10/15 09:07 ID:???
>>114
いや、そういう意味で言ってるんだとしたら間違ってるよ。
っていいたかったの。

> &は含むけど<や>は含まないように
> リンクを張る正規表現は?
URLという意味では<が含まれてても問題(よね?)と思うので、
&lt;や&gt;をはじく必要は無いと思うけど・・・
ちょっと考えるよ。

117 :名無しさん@お腹いっぱい。:01/10/15 09:12 ID:???
すんません。
$116 =~ s/(問題)/$1無い/;
$116 =~ s/</&lt;/g;
$116 =~ s/>/&gt;/g;

118 :名無しさん@お腹いっぱい。:01/10/15 10:07 ID:???
>>116-117
問題あるよ。
http://www.isi.edu/in-notes/rfc2396.txt

119 :名無しさん@お腹いっぱい。:01/10/15 10:08 ID:???
つーか正しく伝わってないかも。
< や > が含まれてると問題あるけど、htmlソース上は
&lt; や &gt; だから含まれてしまうのを
修正したいってことなんだけど。

120 :113:01/10/15 10:18 ID:???
s/</&lt;/g; s/>/&gt;/g してから
リンク張ってるのがまずいんですね。
リンク張りつつ < > 除去すれば正確になるのかな。

s{
  ((?:https?|ftp|gopher|telnet|whois|news)://[-_.!~*'()a-zA-Z0-9;/?:\@&=+\$,%]+)
  | (<) | (>)
}{
  $1 ? "<a href=\"$1\">$1</a>" :
  $2 ? '&lt;' :
  $3 ? '&gt;' :
  ''
}xeg;
とかはどうですか?

121 :113:01/10/15 10:37 ID:???
単純に &lt;、&gt; を避けるならこんな感じっすかね?
s{(
    (?:https?|ftp|gopher|telnet|whois|news)://
    (?:[-_.!~*'()a-zA-Z0-9;/?:\@=+\$,%] | &(?![lg]t;) )+
)}
{<a href=\"$1\">$1</a>}xg;

122 :名無しさん@お腹いっぱい。:01/10/15 11:23 ID:???
news: の場合も // で始まるんでしたっけ?
s{(
(?:(?:https?|ftp|gopher|telnet|whois)://|news:)
(?:[-_.!~*'()a-zA-Z0-9;/?:\@=+\$,%] | &(?![lg]t;) )+
)}
{<a href=\"$1\">$1</a>}xg;

123 :名無しさん@お腹いっぱい。:01/10/15 11:35 ID:???
URI referenceの場合にもリンクを貼りたいから
s{(
(?:(?:https?|ftp|gopher|telnet|whois)://|news:)
(?:[-_.!~*'()a-zA-Z0-9;/?:\@=+\$,%#] | &(?![lg]t;) )+
)}
{<a href=\"$1\">$1</a>}xg;

124 :名無しさん@お腹いっぱい。:01/10/15 11:51 ID:???
一般的なCGIなら http と ftp 以外にリンク貼る必要も無いだろうから、
これで十分かな?
s{((?:https?|ftp)://(?:[-\w.!~*'();/?:\@=+\$,%#]|&(?![lg]t;))+)}{<a href="$1">$1</a>}g;
どっちにしても中途半端だけど。

125 :名無しさん@お腹いっぱい。:01/10/15 12:21 ID:???
oとtarget=_blankを付けてみる。
s{((?:https?|ftp)://(?:[-\w.!~*'();/?:\@=+\$,%#]|&(?![lg]t;))+)}{<a href="$1" target=_blank>$1</a>}go;

126 :名無しさん@お腹いっぱい。:01/10/15 12:57 ID:???
o修飾子はパターンに変数が入っていないときは影響なしとおもう。
ちがうの?

127 :名無しさん@お腹いっぱい。:01/10/15 13:01 ID:???
そうかも。

128 :名無しさん@お腹いっぱい。:01/10/19 22:45 ID:SauUPYVx
正規表現の火を消すな。

129 :名無しさん@お腹いっぱい。:01/10/20 00:13 ID:???
意味ワカンネーよ  (藁
#詳説買って来たけどかなり本棚の肥やしになりそうな感じ・・・

130 :名無しさん@お腹いっぱい。:01/10/20 08:13 ID:???
&&&

131 :名無しさん@お腹いっぱい。:01/10/20 16:58 ID:rS0gfeFk
正規表現って、オミトロンで使ってるマッチングルールと同じ?

132 :名無しさん@お腹いっぱい。:01/10/20 22:31 ID:???
それはちょっとおかしい。
良く突っ込まれる例:
あめぞうって、2chとかMAGABBSと同じタイプ?

133 :名無しさん@お腹いっぱい。:01/10/25 02:00 ID:GZ9i4shV
テスト

http://www.2ch.
net/
<a href="http://www.2ch.net/">http://www.2ch.net/</a>

134 :名無しさん@お腹いっぱい。 :01/10/25 02:24 ID:???
http://www.2ch.net/</a>

135 :名無しさん@お腹いっぱい。:01/10/25 17:47 ID:???
>http://www.2ch.net/a</a>

136 :名無しさん@お腹いっぱい。:01/10/25 17:56 ID:???
http://www.2ch.net/----This site is a Japanese famouse WEB site.

137 :名無しさん@お腹いっぱい。:01/10/26 09:05 ID:+A/kF3WN
何をやりたいんだ

138 :名無しさん@お腹いっぱい。:01/10/26 11:48 ID:???
</a>までリンクされる現象が直ってるかどうかのテスト、でしょ。
read.cgiでは直ってるみたいね。

139 :名無しさん@お腹いっぱい。:01/10/26 11:54 ID:???
http://www.google.co.jp/search?q=%83S%83%8B%83A&hl=ja&lr=

140 :名無しさん@お腹いっぱい。:01/10/27 00:02 ID:7lO0RLH0
道場は閉鎖されたようです。

35 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)