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

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

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

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