正規表現at UNIX
正規表現 - 暇つぶし2ch2:終了
02/12/06 18:27
終了

3:名無しさん@お腹いっぱい。
02/12/06 18:47
/\s*終\s*了\s*/

4:名無しさん@お腹いっぱい。
02/12/06 18:51
oreillyの本読めば全てに限りなく近く分る。よって終了。

5:名無しさん@お腹いっぱい。
02/12/06 18:52
板地害

6:名無しだよもん@カラアゲうまうま
02/12/06 19:00
URLリンク(www.oreilly.co.jp)

7:名無しさん@お腹いっぱい。
02/12/06 19:05
釣り合いの取れた括弧にマッチする正規表現を教えてください。

()
((()))
((((()))))
(()())
((())(()()))

8:名無しさん@お腹いっぱい。
02/12/06 19:12
正規表現ってFAだけで実装してるの?PDAも使うの?

9:名無しさん@お腹いっぱい。
02/12/07 11:36
>>7
無い。


10:名無しさん@お腹いっぱい。
02/12/07 20:44
(・)(・)
. .) (
( Y )

11:性器表現
02/12/07 22:28
性器表現

12:名無しさん@お腹いっぱい。
02/12/12 22:24
限界までgrepやればいい気持ち

13:名無しさん@お腹いっぱい。
02/12/12 22:41
正則表現って訳してる本無かったっけ?

14:名無しさん@お腹いっぱい。
02/12/13 09:51
詳説正規表現に正則表現という言葉が出てきた気がする

15:はにゃーん☆ ◆ZoWSAKURAw
02/12/15 16:08
>>7
Perl 5.6 以降なら、可能。

#! /usr/local/bin/perl

@kakko = qw[()
())
((()))
(()()))
((((()))))
(()())
((())(()()))];

$regex = qr/[^()]*\((??{$regex})*\)[^()]*/;

foreach (@kakko) {
if(/^$regex$/) {
print "Match: $_\n";
} else {
print "Unmatch: $_\n";
}
}


16:名無しさん@お腹いっぱい。
02/12/16 08:16
でも、それ正規表現じゃないんじゃないの?
文脈自由文法のクラスでしょ?

17:名無しさん@お腹いっぱい。
02/12/16 12:28
それ言ったら、今の「正規表現」なんてそもそもの定義から外れちゃうような気がするぞ。


18:名無しさん@お腹いっぱい。
02/12/16 20:24
数学的文脈におけるいわゆる「正則な表現」だけで括弧の釣り合いにマッチさせるスレはここですか?

19:名無しさん@お腹いっぱい。
02/12/16 20:43
ここは既に終了したスレです。

20:名無しさん@お腹いっぱい。
02/12/17 03:36
いやん、正規表現がんばろー。
16>>
拡張正規表現で納得しろ。

21:名無しさん@お腹いっぱい。
02/12/17 04:44
そもそも正規言語は数をかぞえられないんだから、
拡張正規表現でもないでしょ。

22:名無しさん@お腹いっぱい。
02/12/17 19:24
拡張正規表現 = 「正規表現」の定義を拡張。;)


23:名無しさん@お腹いっぱい。
02/12/17 20:22
>>20
言った方がいいかどうかわからんが
16>>
逆だ

24:名無しさん@お腹いっぱい。
02/12/21 23:29
/^(U).\/*&_$&&*_@&(&*@+|@_(@)(?!<>)_##[o-Q](.*O+)&^&%^#)#+#$/


25:おむこさん志望 ◆QtGqCwfDSA
02/12/22 00:23
いま glibc のマルチバイト回りをやってる人が書いたドキュメント
URLリンク(lc.linux.or.jp)
URLリンク(lc.linux.or.jp)

>>13
オートマトンで有名な本
URLリンク(www.saiensu.co.jp)
には正則表現って書いてあった。

26:名無しさん@お腹いっぱい。
03/01/06 02:59
URLリンク(sorekika.com)


27:名無しさん@お腹いっぱい。
03/01/06 22:41
question = ( to ) ? be : ! be;
         -- Wm. Shakespeare

28:性器表現
03/01/11 12:17


29:山崎渉
03/01/15 13:00
(^^)

30:名無しさん@お腹いっぱい。
03/02/16 02:34
質問よいでしょうか・・・
英辞郎の読み仮名を削除したいのですが、
{(←全角です)ではじまり}(←これも全角です)でおわる文字列を
ごっそり置換したいのですが、どう表現すればいいのかよく
わかりません・・・・ おしえてくださいおながいします


31:名無しさん@お腹いっぱい。
03/02/16 02:48
>>30
処理系は何?

32:名無しさん@お腹いっぱい。
03/02/16 03:05
>>30
sed "s/{.*}//" < input > output
では駄目かい?

33:名無しさん@お腹いっぱい。
03/02/16 06:36
>>32
その解は1行に複数の対が出てきたときに破綻する

34:名無しさん@お腹いっぱい。
03/02/16 12:28
>>31
入れ子になっていない、かつsedが日本語に対応しているならば
s/{[^}]*}//
というパターンを使うのが楽。

35:30
03/02/16 13:50
>>31
Windowsなんですよね・・・xyzzyの置換使おうかと思ってたんですが
あ、Pythonも使い方よくわからないけど(汗汗)入ってます
# Pythonだとどうかくんですかね??

ダメだったらCygwinでも入れてやってみようと思います。
皆様有難う御座います。

36:名無しさん@お腹いっぱい。
03/02/16 14:03
秀丸の置換使えば?

37:名無しさん@お腹いっぱい。
03/02/16 14:26
perlぐらいうごかん?

38:あぼーん
あぼーん
あぼーん

39:30
03/02/16 15:35
>>34さんの方法で問題なく出来ました。
有難う御座いました。とりあえず、この表現の
意味をきちんと理解しとこうと思います。メモメモ・・・

ところで、>>36さん、何故秀丸?

40:あぼーん
あぼーん
あぼーん

41:名無しさん@お腹いっぱい。
03/02/17 07:44
BNF使え

42:エディタ何617
03/02/21 16:46
スレリンク(software板:641-643番)
より移行してきますた。
正規表現の話はこっちでしましょ。
俺には大した知識はないんだが。

>642 :名無しさん@お腹いっぱい。 mailto:[sage] :03/02/21 15:28 ID:esOQbptZ
>なんのために [:alpha:] のような書式があるのかと子一時間

これは知らんかった。
テキストエディタの粋を脱しそうだが。

43:エディタ何617
03/02/21 16:47
>643 :名無しさん@お腹いっぱい。 mailto:[sage] :03/02/21 15:31 ID:+tcoIlhs
>>>641
>文字クラスが文字コードに依存するって言うのは恥ずかしいことでしかないと思うんだが。
>どんなコードでも入力が同一なら出力も同一であるべきじゃないの?

後半はよくわからんが、文字クラスが文字コードに依存するのは当然のことだと思うぞ。

文字 a は a というアルファベットという意味があるわけではなく単なるコード(0x61)なわけ。
テキストエディタでは普段から文字コードなんて考える必要はないんだけど、
正規表現では [a-z] とすると
Shift-JISなら [\x61-\x7A]
EBCDICなら [\x81-\xA9]
というふうに変わってくる。
当然文字コードに依存する。
ここで文字コードに依存せずに認識するとなると、EBCDICの場合
[a-z]=[\x81-\x89\x91-\x99\xA2-\xA9]
になってしまって本来の [\x81-\xA9] にはならなくなってしまう。
そのために 642 のような [:alpha:] なんかが用意されている。
さもなければ文字コード共通正規表現用文字テーブルなんてものが必要になりかねない。

テキストエディタで扱う文字コードとして EBCDIC を例に出すのは適当ではないが。

エディタがしているのは文字コードを認識して表示するということで、
文字コードを変換しているわけではない。
もちろん明示的に変換(文字コードを変更して保存等)すれば変わる。

44:名無しさん@お腹いっぱい。
03/02/21 17:54
>文字クラスが文字コードに依存するって言うのは恥ずかしいことでしかないと思うんだが。

そりゃ確かに恥ずかしい。
でも [a-z] という表記が「小文字アルファベットの文字クラスを指定している」ものだと誤解して、
誤用しているほうがもっと恥ずかしい。
「-」を使った表記は文字コード上で連続した複数の文字を意味しているだけだから、
本当に文字クラスを指定しなければならないシーンでは [:lower:] や \l を使うべき。
代表的なエンコーディングでは偶然文字コードが連続しているから
[a-z] で期待した動作になるので常用されているの。

45:名無しさん@お腹いっぱい。
03/02/21 20:46
[:alpha:] とかってウムラウトがどうたらとかいう話のためにあるのだと思ってた

46:名無しさん@お腹いっぱい。
03/02/21 21:22
unicode などが本格的に使われ出して
多国語があたり前になったら
[:Japanese:] とか [:Korean:] とか
できるのかな。

47:名無しさん@お腹いっぱい。
03/02/21 21:36
>>45
その通り。 POSIX ではロケールによって変わるよ。

48:テキ何618
03/02/21 23:22
興味があるので誘導されてきました。

ってココは関連Linkないので張るね。
●正規表現最新リンク集2003
URLリンク(www2.famille.ne.jp)
●正規表現メモ
URLリンク(www.kt.rim.or.jp)

で向こうのスレでの疑問で思ってたんですが、
| また正規表現の正しい、正しくないってあるのか?
上の引用についてずばり解決してくれる神はおられませんか?
向こうでも思ってたんだけど中途半端な正規化だから文字コードに
依存するって思ってたんですが。

49:名無しさん@お腹いっぱい。
03/02/22 00:55
>>44
>本当に文字クラスを指定しなければならないシーンでは
> [:lower:] や \l を使うべき。

つーことは[B-Yb-y]は本当に文字クラスを指定せんといかんシーンでは
 [BCDEFGHIJKLMNOPQRSTUVWXYbcdefghijklmnopqrstuvwxyz]
あるいは
 [^AZaz[:digit:](憶えとらんので略)]
と書かねばならんわけか…

50:名無しさん@お腹いっぱい。
03/02/22 01:19
[:alpha:] とかって、実際に実装されてるのあるの?


51:名無しさん@お腹いっぱい。
03/02/22 01:21
>>48
ある正規表現が書かれた目的を果たせるかどうかで、正しい正しくないを言うことはで
きるでしょう。ただし目的を果たすといっても厳密でなければならない場合やアバウト
で大丈夫な場合と様々なレベルがあるわけで、ケースに応じて使い分けるのが大人とい
うものです。

それから正規化しているから正規表現というわけじゃないです。ある有限オートマトン
が受理する特定の言語(記号列)を正規言語と呼び、その受理される言語の全ての集合を
正規集合と呼び、その集合を表現する方法を正規表現と呼んでいるのです。文字コード
云々が問題になるのは、SJISやEUCのようなマルチバイトコードで表現された1文字を1
つの記号として認識しない正規表現エンジンがあるからで、またエンジンが認識する場
合でも利用者側が記号としての文字と文字コードとの関係を、[a-zA-Z] と [:alpha:]
のようにゴッチャにしているからです。もっとも後者についてはマルチバイトには依存
しない話ですけれど。

>>49
厳密にはそういうことになります。メンドイのでそこまでする人は少ないでしょうが。

52:エディタ何617
03/02/22 01:40
| また正規表現の正しい、正しくないってあるのか?

俺なんかの知識じゃたいしたこと言えないが、現在においては統一的な正しさなんて無いと思う。
ものによって実装が違うから、egrepでは正しくedでは正しくないとかあろうね。
使い手が自分で何をしようとしているのか理解できているかどうかが問題になりそう。

Q「s/[A-z]//g としたら[や^まで消えてしまいました。この正規表現は間違っていますか?」
A「正規表現もパターンマッチの結果も正しいです。ただ、あなたの求めている正規表現ではないでしょう。」

>向こうでも思ってたんだけど中途半端な正規化だから文字コードに
>依存するって思ってたんですが。

エディタは文字コードを勝手に認識してくれるからユーザーが考える必要はないけど、
文字クラスで[a-z]とかやる場合はどうしたって文字というより文字コードを扱うってことになる。
ただ、普通は上に書いたように[A-z]なんてやる奴はいないだろうから、
実質的には文字コードに依存していないかのように扱えるというだけだと思う。

ところで [a-z] として、これがどういう意味であって欲しいんでしょうか?

53:名無しさん@お腹いっぱい。
03/02/22 03:42
[a-z]
"a"の文字コードから"z"の文字コードまでの文字コードの文字のことかな

54:テキ何618
03/02/22 12:14
>51,52
すまん質問の仕方が悪かった。
上で正規表現の仕様が悪いみたいな雰囲気があったから疑問に
おもったんですが、たとえば「grepの仕様は正しいが、awkの仕様は
間違ってる」みたいな正規表現の仕様上の問題で間違いというのが
あるのかという疑問でした。

>[a-z]
その正規表現で規定されているaのキャラクタからzのキャラクタまで。
文字コードでも文字でもないはずだ。
たとえばProxomitronなら[a-zA-Z]と同じようになるようにキャラクタの
並びが規定されている。

55:名無しさん@お腹いっぱい。
03/02/22 12:19
正規表現が実装されているなら
実装の細部がgrepとawkでは異なるというだけで
正しいも正しくないもないんだってば。

56:名無しさん@お腹いっぱい。
03/02/22 14:34
全然議論が噛み合ってないなぁ。
「正規表現」(オライリー)の一冊くらい読んでから出直してきて欲しいな。
でなきゃこんなの不毛だよ。

57:名無しさん@お腹いっぱい。
03/02/22 14:50
>>51
> それから正規化しているから正規表現というわけじゃないです。ある有限オートマトン
> が受理する特定の言語(記号列)を正規言語と呼び、その受理される言語の全ての集合を
> 正規集合と呼び、その集合を表現する方法を正規表現と呼んでいるのです。文字コード

これが理解できません。

58:名無しさん@お腹いっぱい。
03/02/22 15:56
>>[a-z]
>その正規表現で規定されているaのキャラクタからzのキャラクタまで。
>文字コードでも文字でもないはずだ。

「aのキャラクタからzのキャラクタまで」ってのが文字コードそのものだと思うぞ。
「文字コードでも文字でもない」ってのが [:alpha:] なんじゃないの。
[a-z] だけ特殊な意味合いを持って欲しい、なんてことではないでしょう。

>たとえばProxomitronなら[a-zA-Z]と同じようになるようにキャラクタの
>並びが規定されている。

絶対そんな規定されてないよ。
Proxomitronで規定されているのは「大文字小文字を同一視する」ってこと。
だから [a-Z] なんて書いても [a-z] と同等の文字コードの並びとして扱われる。
これは単にProxomitronの性質上、扱う文字列の大文字小文字を区別するより
区別しない方が圧倒的に多いということから独自に規定されたものだろ。

「文字でも文字コードでもない」として扱うためには、エディタ作者なりが
新たな文字の統一コードを規定していろんな文字コードに対応した変換表でも作り、
ユーザーは既存の文字コードの代わりに作者の規定したコードを理解して使うってことになるんじゃないか?

59:名無しさん@お腹いっぱい。
03/02/22 17:34
形式言語の教科書くらい読んでから来い

60:テキ何618
03/02/22 23:55
>55
ですよね、最近そういった話を耳にするんで敏感になってました。
きっぱり否定してくださって助かります。
51氏も分かりやすい説明ありがとうございます。

>58
それが正規表現関係の資料をいくら読んでも必ず「aのキャラクタから
zのキャラクタまで」だったと記憶してます。
逆にコードで表記されてる資料がありましたら、ご提示願えませんか?
# 日本語の資料だとよく文字コードの話もみます。

>「大文字小文字を同一視する」
の実装はどうされているのでしょうか?
まさか一度さきに別に小文字を大文字に書き直して正規表現を当ては
めてから元の小文字に戻すという芸当はされてないと思います。
私は憶測ですが正規表現上で小文字と大文字を同一文字だと規定し
ているように思えます。
# 文字コードレベルだと高とはしご高の関係に近いと思います。

>59
お勧めのありますか?

61:名無しさん@お腹いっぱい。
03/02/23 00:05
>>6 くらい通読して出直してから議論してくれよ。でなきゃこんなやりとり無駄だよ。
いや、煽りじゃなくてマジでさ。

62:名無しさん@お腹いっぱい。
03/02/23 02:10
>>6の本って目次だけ見ると各ツールの「実装」について述べてる
みたいだけど、正しい「定義」については載ってるの?

63:名無しさん@お腹いっぱい。
03/02/23 02:15
規格としては POSIX 1003.2 があるけど、
正しい定義なんてものはないと思う。

64:名無しさん@お腹いっぱい。
03/02/23 02:50
>>62
『正しい「定義」』なんてないんだからおまいらの議論は不毛だって言ってんの。
中途半端な知識と思い込みだけの虚しい空論だよ。

65:名無しさん@お腹いっぱい。
03/02/23 03:32
>>62
たしかに目次には各ツールの実装についての記述が目立つ。
だが、この本のキモは4章と5章だ。
君が正規表現をある程度自在に扱えるのであれば、
この二つの章を読むだけでも価値はある。
とりあえず話はそれからだ、と思うぞ。


66:名無しさん@お腹いっぱい。
03/02/23 06:07
文字クラス中の - が文字コードでの連続を表すか文字としての連続を表すかは実装依存です、
で終了。

67:62
03/02/23 14:33
>>63-65
いや、>>66の言うように実装依存だと思ってたから、
正しい「定義」が載ってるなら、読んどこうかと思ったんですが。

>>61の発言を(それまでの流れと併せて)読むと、さも載ってそうなんですが、
目次見たら(-_-)ぁゃιぃ…だったので。


68:名無しさん@お腹いっぱい。
03/02/23 14:53
URLリンク(www.opengroup.org)
規格が「正しい」かどうかは別として…

69:名無しさん@お腹いっぱい。
03/02/23 15:30
正規表現の定義ねぇ。どうもどこかの団体がきっちりまとめた規格
のような「定義」を期待してるようだが、このあたりのハナシは計算
機科学色が強いから定義など教科書の数だけある、と言ってみるテスツ。
本質はみな同じのはずだけどナ。
しかも見慣れぬ数学記号飛び交う抽象的な議論になるから、
オライリー本で充足しているヤシにはカルチャーショックだろう。
大学の図書館でも逝け。

70:61
03/02/23 18:23
>>67
> >>61の発言を(それまでの流れと併せて)読むと、さも載ってそうなんですが、
> 目次見たら(-_-)ぁゃιぃ…だったので。

漏れの発言を勝手な解釈すんなよ。
正しい「定義」なんて載ってるわけないだろ。正しい「定義」なんてないんだから。

71:61
03/02/23 18:33
>>67
ていうかあれだ、「定義」の話じゃなくて「規格」の話をしたいのか?

「定義」の話なら、>>69 の言うように、
計算機科学(の世界だと「正則表現」の方が通りが良いか?)の本でも
紐解いて読んでみるのが良いと思う。

そうでなくて、単に、
文字列バターンマッチに使われる「正規表現」の正しい「規格」の話、
ってことなら、そんなものは無い。
強いて言えば、>>68 くらい。

72:名無しさん@お腹いっぱい。
03/02/23 18:37
>>67
「定義」=「決め」でしょ。
その場その場で都合のいいように「定義」するわけだから
「正しい『定義』」なんてのはあるわけがない。

73:名無しさん@お腹いっぱい。
03/02/23 18:39
>>67
じゃ、まずは「正しい」の定義から始めようか。

74:61
03/02/23 19:06
というわけで、このスレは、「ホップクロフト&ウルマンを輪読するスレ」になりますた。

75:62
03/02/24 03:14
規格として[a-z]の解釈について正しい定義はあるのか?
っていう議論中に、「コレ読め」と言われたら載ってるように
見えても仕方ないと思うんですがねぇ。

>>6に載ってないから無い」、とは言えんでしょ。
何の為に読めと言ったのか聞いてよろしい?>>61

76:名無しさん@お腹いっぱい。
03/02/24 05:19
POSIX 1003.2 に厳密に従っていればこれにある通り。
URLリンク(www.linux.or.jp)

が、世にある実装は大抵そうでない。

77:名無しさん@お腹いっぱい。
03/02/24 18:47
>>76
見た感じ、EBDICでもロケールが英語なら[a-z]は
英小文字のセットとして評価されるべきみたいですな。

78:名無しさん@お腹いっぱい。
03/03/14 03:37
>>75
全く違う。
そもそも君の話は正しい定義がこの世に存在する事を
前提としている。しかし実際はそのようなものは
ないわけだ。(「正しい」の意味が私の考えている
ものと違うならわからないが)
そのことを理解するために(というか議論のための
基礎知識を得るために)読んでおくべきと 61 は
言いたかったのだと勝手に解釈してみる。

厳密な定義という意味で正しいと言っているなら
計算機科学の教科書をひもといてみるといいかもなあ。

79:名無しさん@お腹いっぱい。
03/03/14 09:29
>75
そんなマヌケな話を避けられるようになるよ、
とそういう意味で勧めてくだすったんだろう。

80:75
03/03/15 03:46
>>78
>そもそも君の話は正しい定義がこの世に存在する事を前提としている。
シテネーヨ。

つーか著名ツールの実装に関する本を読んだ所で、
[a-z]の解釈は~という議論に決着つくのですか。

1-60までのスレの流れと、>>61の勧めた>>6の内容を
良く見てから出直して下さい。>>78,79

81:名無しさん@お腹いっぱい。
03/03/15 08:44
取り合えず読んでみる、と言う選択肢は
意図的に無視されているのだろうか…


82:名無しさん@お腹いっぱい。
03/03/15 10:24
もともと [a-z] なんていう表記は、素な正規表現/正則言語にはない。
でもそれじゃ面倒だから - で繋いだ2つの文字の間の文字群を略記する方法が、
及び実装としては単に文字コードを繋ぐ方法がデファクトスタンダードになった。
それを勘違いしたバカが [a-z] は論理的なアルファベットを意味すべきだとか言い始めて
[[:alpha:]] や \l やら \a が導入されるようになったり、変な挙動をする実装もでてきたかもしれん。
でここでPOSIXなんて有名無実なものが定義されたわけだ。
なのにさらにバカが [a-z] の正しい解釈、定義を教えろとかいう。

やれやれだ。

83:名無しさん@お腹いっぱい。
03/03/15 13:23
ここは62=75の脳内正規表現を研究するスレになりますた。

# 素直に勉強してから出直せばいいのに。。。

84:62=75
03/03/15 22:06
>>82
やれやれとはこっちが言いたい。
[a-z]の解釈が文字コード依存なのは承知済みだっつーの。

>>61のタイミングで論議を不毛と評しつつ、正規表現の本読めと
言われたら、規格か何かが載ってるとしか思えんでしょうが。
著名ツールの実装見たところで、議論の不毛を悟れますか?

85:名無しさん@お腹いっぱい。
03/03/15 22:43
少なくとも読めば実装により異なることは察することができたかもね

86:名無しさん@お腹いっぱい。
03/03/15 22:46
規格自体を読みたいなら68にリンクがあるし、なんでそう粘着してるんだろうか

87:名無しさん@お腹いっぱい。
03/03/15 22:51
なぜに著名ツールの実装しか載っていないと決めつけ
勝手な解釈で話を進めるのだろう?
とにかくおかしな前提と曲解が多い上に粘着だ。

88:名無しさん@お腹いっぱい。
03/03/15 23:53
もう放置しようよ……。

89:名無しさん@お腹いっぱい。
03/03/16 00:39
非放置国家 2ch

90:名無しさん@お腹いっぱい。
03/03/17 23:40
>>87
決め付けてませんが。
>>62で実装以外の内容(具体的に規格など)は
載って無いかと聞いてるんだし。

おかしな前提・曲解・粘着は認めますがね。
で、偉そうに読めとか言った>>61は何処逝ったの?

91:名無しさん@お腹いっぱい。
03/03/18 01:11
>>90
> で、偉そうに読めとか言った>>61は何処逝ったの?
読んだら出てくるんじゃねーの?

92:90
03/03/18 01:29
とっくの昔に読んでいるんだが…
(立ち読みでざっとだけど)

93:名無しさん@お腹いっぱい。
03/03/18 01:39
形式言語系の本は読んだのかYO!

94:名無しさん@お腹いっぱい。
03/03/18 01:58
>>92
そんなの読んだうちに入らん。

95:名無しさん@お腹いっぱい。
03/03/18 02:02
理屈が通用すると勘違いせず、粘着は放置しましょう

96:名無しさん@お腹いっぱい。
03/03/18 02:15
腹が減ってるもんで
こんなのでも食いついてしまうんです。

97:名無しさん@お腹いっぱい。
03/03/18 02:36
>>90
君が何を知りたいのか、
おじさんわかんなくなっちゃったよ。
ここらでひとまず
疑問点を整理して箇条書きにしてみないか?

98:名無しさん@お腹いっぱい。
03/03/18 22:00
技術系の本を立ち読みしただけで読んだ気になれる人には
何を言っても無駄ではなかろうか。

99:山崎渉
03/04/17 12:30
(^^)

100:あぼーん
あぼーん
あぼーん

101:名無しさん@お腹いっぱい。
03/04/22 15:32
『詳説 正規表現 第2版』
ISBN4-87311-130-7
本体価格5,400円

が5月に

102:あぼーん
あぼーん
あぼーん

103:名無しさん@お腹いっぱい。
03/04/22 23:53
>>101
おっ。
ソースどこ?

104:名無しさん@お腹いっぱい。
03/04/23 00:54
定義うんぬんよりも、便利な方がいい。

というわけで、

(?# (?: (?= (?! (?<= (?<! (?> (?()

105:名無しさん@お腹いっぱい。
03/04/23 16:36
>>103
オライリーのメルマガ

106:名無しさん@お腹いっぱい。
03/04/24 11:01
正規表現(regular expression)の名前の由来はなに?
regularをなぜ正規と略したんだろう?
「正式にきめられていること。正式の規定」という意味の正規では
幾分意味不明なんじゃないだろうか?
むしろregular verb(規則動詞)の意味のregularと捉えるべきで、
「規則表現(法or式)」とでもした方が文字列の規則性を規則的に表現するもの
という意味でより素直で的確なんじゃないだろうか。
ここにはnormal distributionを正規分布と略し日本語としては
意味不明にしてしまったのと同様のセンスの無さが感じられる。

107:名無しさん@お腹いっぱい。
03/04/24 11:51
「function」を「関数」と訳すアフォといっしょだろ。


108:名無しさん@お腹いっぱい。
03/04/24 11:54
regular に合うような日本語単語を考えると
正規、正則、規則、規律、規則的、整然、合式、本格的、定常、完全、定例
などが挙げられる。
正規に違和感を感じるのは同意。
ただし、規則だと regular より rule の方を感じる。

regular expression を長々と訳すならばオレテキには
規則正しい表現法
となるが、あとはそれをどのように短くするかだ。
正規表現には違和感あるが
規則表現にはさらに違和感ある。
規則正しい生活を規則生活と省略するのに似ている。


109:あぼーん
あぼーん
あぼーん

110:名無しさん@お腹いっぱい。
03/04/24 13:46
わたしは特に違和感ない。

複数の体系の共通項的要素を抽出して、どれをもあつかえる
単一の体系にまとめることをCS的に正規化というでは?

111:名無しさん@お腹いっぱい。
03/04/24 13:57
正則表現といわれたほうがシックリするわ。

112:名無しさん@お腹いっぱい。
03/04/24 14:15
>>107
「函数」が正解、という主張ならそれは翻訳の問題ではなく
日本の戦後国語教育の問題なわけだが

113:107
03/04/24 14:55
>>112
> 「函数」が正解、という主張なら
違う。


114:名無しさん@お腹いっぱい。
03/04/24 15:38
>>113
それならそれで108なみ詳細な解説きぼんぬ

115:113
03/04/24 17:11
>>114
> それならそれで108なみ詳細な解説きぼんぬ
どきっ!!
い、いやぁ、「function」は普通に訳したら「機能」じゃないかなぁ~、
なんて思うので。
なんで、「関数」になったのか疑問なので。
やっぱり、かっこいいからかなぁ。


116:名無しさん@お腹いっぱい。
03/04/24 18:10
数学方面なら「正則」とするところなのに、情報数学方面では「正規」の方が
定着しているということなのか?

>>115
数学で既に訳語があったからという単純な話なんでは。函数→関数の
書き換えはまた別の話だが。古い先生だと「関数」の表記を絶対使わない人
もいるね。自分も函数の方がいいと思う

117:名無しさん@お腹いっぱい。
03/04/24 18:38
中国語が英語から「function」という英単語を輸入するとき
それを「函数」と翻訳した。
函は中国語で「ファン」と発音し「function」の「ファン」に似ているところからきている。
そのあと日本は中国から「函数」という言葉を漢字で記述された文字として輸入した。
そして「函」を「カン」と発音した。
戦後の日本の教育において「函」が教育仕様内の標準的漢字から外れるという理由から
およそ同義で同音の「関」に置き換えられた。

すなわち「function」の「fun」を元にしてその部分は
以下の経緯で「関」に変わった。
英語の「fun」
↓発音の類似性から
中国語の「函」(ファン)
↓同じ文字
日本語の「函」(カン)
↓発音の類似性から
日本語の「関」(カン)

こういう改変に次ぐ改変で「関数」という言葉が生まれた。
もはや「関数」という言葉にはそう表現する適切な理由がない。
情報系の技術屋なら「function」ないし「ファンクション」
と表現すれば良いのだ。どうしても漢字で書きたければ「機能」で良し。
「関数」だなんていい加減な言葉を使うなら
「class」を「学級」とでも表現してくれた方がまだましと言えよう。


118:名無しさん@お腹いっぱい。
03/04/24 19:37
函(はこ)の数と意味も掛けてあるから、やはり捨て難い訳ではある

119:名無しさん@お腹いっぱい。
03/04/24 21:06
>>118
classは「級」でいいはずだけど、「きゅう」ではみじかすぎて
わからんからそのまま「くらす」。

120:名無しさん@お腹いっぱい。
03/04/24 23:01
くらす、きさん!!

121:名無しさん@お腹いっぱい。
03/04/24 23:41
もう「関数」で慣れちゃってるからなぁ。
「機能」と訳したところで
意味がわかりやすくなるわけでもないし。

「正規表現」にしても「関数」にしても
おれにとってはある概念に対するラベルでしかない。

122:名無しさん@お腹いっぱい。
03/04/25 00:41
「関数」は一つの名詞なので、
一旦覚えてしまえば
「関数」という訳について不自然さは感じにくい。

でも「正規表現」は「正規」と「表現」の複合語であるから、
正規な表現? という意味不明さはいつまでも残る。

123:名無しさん@お腹いっぱい。
03/04/25 00:43
"regular expression" というからには
regular じゃない expression もあるんでしょうか?
たとえばどんなのですか?


124:名無しさん@お腹いっぱい。
03/04/25 08:08
>>123
fgrepに書く検索パターン

125:名無しさん@お腹いっぱい。
03/04/25 11:26
>>115
プログラミング用語での function は単なる「機能」ではなく、
数学的な(値を返す) function としてのニュアンスが込められているんじゃ
ないのかなあ?

関数型言語ではいうに及ばず、FORTRAN とかでもそんな感じだし、
C だってもともと void 型なんてないし。

# 正規表現と関係ないので sage


126:名無しさん@お腹いっぱい。
03/04/25 11:34
「機能」も造語っぽくない?
明治あたりの。

127:名無しさん@お腹いっぱい。
03/04/25 14:00
関数が函数の書き換えだと知ったとき、小学校の算数の時間で関数の
説明に「ブラックボックス」という言葉を使っていたのを思い出した。
この書き換えは最悪だと思ったな。

しかし、いくら原語が同じだとしても、関数と機能は日本語としては完全に
別物になってしまっている。function key の function は、やはり「機能」の
意味でないと落ち着かない。

>>122
「正則」は、ほとんど術語としてでしか使われることがないけど、「正規」は
普通の文章でも使われるからね。「正規」と「表現」の結び付きが強くなって
しまう。

128:名無しさん@お腹いっぱい。
03/04/25 14:00
expression にしても、「式」とも訳される場合もあって悩ましいことこの上なし

129:名無しさん@お腹いっぱい。
03/04/25 15:18
じつは日本語って、語彙が豊富?
まぁ、ほとんど訳語だけど。。。


130:名無しさん@お腹いっぱい。
03/04/25 16:19
>>127
> function key の function は、やはり「機能」の意味でないと落ち着かない。

それは「function key」を「関数キー」と読んでる人に言ってくれ。いるのか?

Google で検索しても 163 件しかない上に、関数電卓の「関数キー」
(sin 関数のキーとか) だの「ハッシュ関数のキー」だのばっかりなのだが。


131:名無しさん@お腹いっぱい。
03/04/25 21:24
「ファンクションキー」と言ってるのしか聞いたことがないが、この「ファンクション」
は「機能」の意味でないと落ち着かないと言ってるだけだ

132:名無しさん@お腹いっぱい。
03/04/25 22:31
>>129
自国語で数学的概念を表現できる国は少ないほうだと思われ。
微分、積分、階乗、無理数、有理数、etc...
functionに対する訳で機能と函数で揉めるのは贅沢なことなんじゃないのかなぁ……
ていうか、算数、数学の教科書が日本語だけで完結できること自体、
ほかの国から見ると不思議なことなんじゃないの?

133:名無しさん@お腹いっぱい。
03/04/26 01:12
何の話をしてるんだか・・・

134:名無しさん@お腹いっぱい。
03/04/26 01:48
では、日本における性器表現についてどうぞ


135:名無しさん@お腹いっぱい。
03/04/26 02:04
[まち]んこ

136:名無しさん@お腹いっぱい。
03/04/26 05:40
\(藁田\|ワ[ロラ]タ\)

137:名無しさん@お腹いっぱい。
03/04/26 13:48
>>135 >>136
こういう日本語の正規表現の使える実装にはどんなのがありますか?

Ruby, 鬼車, jperl, xyzzy, Emacs, あたりは使えると思うけど、ほかには?

138:名無しさん@Vim%Chalice
03/04/26 13:59
Vim

139:名無しさん@お腹いっぱい。
03/04/26 18:15
perlとかなら
/(ma|chi)nko/i
みたいに i オプションつけることで
大文字小文字を同一視してくれる機能が一般的に普及してますね。
grepとか大抵の性器表現できるツールにはあるみたい。

そこでほしいのが平仮名片仮名同一視。
/[まち][んむ]こ/i
とすれば「マむコ」にも「チンこ」にもマッチしてほしいわけ。
そういう機能がついた性器表現ってどういうツールにございますか?
あと
/ベートーヴェン/i
で検索したら
「ベートーベン」や「べえとおべん」にもマッチしてくれる
ようなのもあるものでしょうか?


140:名無しさん@お腹いっぱい。
03/04/26 18:53
>>139
後者は正規表現の範疇ではないような。
前者はあってもよさそうだね。

141:名無しさん@お腹いっぱい。
03/04/26 19:16
文字クラスの拡張でしょうか

142:名無しさん@お腹いっぱい。
03/04/26 20:15
>>141
日本語用文字クラスってわけね。
しかしそんな日本でしか使えないもんはツールで対応すべきだな。

>>139
>/ベートーヴェン/i
>で検索したら
>「ベートーベン」や「べえとおべん」にもマッチしてくれる

こんなん正規でも正則でもない非正規表現だ。
>>139は正規表現使うのやめた方が幸せになれそうだよ。

143:名無しさん@お腹いっぱい。
03/04/26 20:25
>>139 Migemoの辞書をカスタマイズすればできるようになるよ

144:名無しさん@お腹いっぱい。
03/04/26 21:25
>>143
そういう問題じゃなかろう・・・

145:名無しさん@お腹いっぱい。
03/04/26 21:27
日本語正規表現の使える実装は Ruby, 鬼車, jperl, xyzzy, Emacs, Vim で全てですね?

146:名無しさん@お腹いっぱい。
03/04/26 22:05
>>145
いいえ。

147:名無しさん@お腹いっぱい。
03/04/27 02:24
文字クラスとか自分で設定できる正規表現みたいなのが
あればいいんじゃないの。
どうせ perl だって場あたり的に好きなように拡張してるんだから。


148:名無しさん@悩み中
03/04/28 05:24
sed ですが、
[[:xdigit:]]\{2\} にマッチする文字列のなかで、
\(61\|75\|6f\) にマッチしないようなものを指定したいとき
どないすればよろしい?


149:148
03/04/28 05:37
やっぱり、先に \(61\|75\|6f\) にマッチする奴を退避しておいてから、
[[:xdigit:]]\{2\} にマッチするやつを指定するしかないんかな…


150:名無しさん@お腹いっぱい。
03/04/29 02:16
誰か、正規表現だけで会話するスレ作ってくれ。


151:名無しさん@お腹いっぱい。
03/04/29 03:26
/いったい何を会話するというのだ/

152:名無しさん@お腹いっぱい。
03/04/29 04:09
>>150
それこそ言いだしっぺの法則だろ。正規表現だけで会話したい >>150 が立てれ。

153:名無しさん@お腹いっぱい。
03/04/29 09:51
駄スレ立てんな。

154:名無しさん@Meadow
03/04/30 10:51
>>153

$mes153 =~ s/。//;
reverse(split(//, $mes153));
わかた?
結果は、「なんてつたレスだ」




155:名無しさん@お腹いっぱい。
03/04/30 11:12
>>154
こうなりますた。
$ perl -e 'quotemeta($var='駄スレ立てんな。'); print reverse(split(//,$var));'
B∧んてぉ洛スμ・


156:名無しさん@お腹いっぱい。
03/04/30 11:29
>>150

名スレの予感

157:名無しさん@Meadow
03/04/30 14:53
>>155

jperlじゃないとだめですね。perl用もかきますた。

($var='駄スレ立てんな。') =~ s/立(.+)。/たつ$1/;
while ($var) {
if ($var =~ s/^[\xA1-\xFE][\xA1-\xFE]// or $var =~ s/^.//) {
push(@str, $&);
$var = $';
}
}
print reverse(@str), "\n";


158:名無しさん@お腹いっぱい。
03/04/30 15:47
>>156
2chですから、性器表現とこれを用いた強制痴漢ならあちこちに。

159:名無しさん@お腹いっぱい。
03/04/30 21:21
\hなのはいけないと思います!

160:名無しさん@お腹いっぱい。
03/04/30 23:49
\SM(?:性器拡張(?!器具))

161:名無しさん@Meadow
03/05/01 15:28
>>157
何やってんだろな、漏れ。
($var='駄スレ立てんな。') =~ s/立(.+)。/たつ$1/;
while ($var =~ s/^[\xA1-\xFE][\xA1-\xFE]// or $var =~ s/^.//) {
 push(@str, $&);
}
print reverse(@str), "\n";
で十分だった。この全角文字対応の正規表現は、euc-jpの奴ね。
でもさ、やっぱ正規表現で会話するってむずいよ。>>150よ。



162:名無しさん@お腹いっぱい。
03/05/01 21:39
print while s//>>161普通過ぎてつまらん/;

163:名無しさん@お腹いっぱい。
03/05/01 21:48
>>161
それは正規表現ではなく perl script というのではないだろうか。

164:名無しさん@お腹いっぱい。
03/05/01 21:50
>>163の的確すぎるツッコミに藁。


165:名無しさん@お腹いっぱい。
03/05/01 21:59
>>1-164
これら全てが正規表現であることは自明なのであります。

166:名無しさん@お腹いっぱい。
03/05/02 08:30
Perl正規表現の質問です。

Ascii文字コードは、アルファベット大文字→ちょこっと記号類→アルファベッ
ト小文字の順に並んでるですが、以下のようになるのはなぜですか。なぜ、ア
ルファベット大文字しか出てこない?

$ perl -e 'for(A .. z) {print $_, ", ";}'
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z,


167:名無しさん@お腹いっぱい。
03/05/02 11:26
>>166

駱駝本(第二版)の p.103 の脚注 *32 に、

> もし指定された最終値が、マジックによる増加によっては生成できない
> ような値なら、最終値のケタ数を超えない範囲で値を生成する。

と書いてあるけど、違う?


168:名無しさん@Meadow
03/05/02 14:27
>>167ありがとん。
>マジックによる増加によっては生成できない

というのが分からなかったので、駱駝本(第3版)引いたら、「マジックイン
クリメント:普通の数値と同じようにして、英数字からなる文字列の値に「1
を加える」方法を知っているインクリメント演算子のこと。」だって。Aは、
16進数で41、Zは、5A。5B以下60までは、[、\, ], ^, _, `で、61から小文字。
一つずつインクリメントされて並んでいるが、できないところを見ると、「英
数字からなる文字列」だけをサポートしている演算子なんだね。

第2版の103ページにあたる121ページあたりにも、A .. Zやa .. zの例はある
けど、A .. zはない。


169:名無しさん@お腹いっぱい。
03/05/02 22:35
文字のインクリメントもちゃんと桁上げされるんよ。

#perl > result.txt
$a = "a";
print ++$a, "\n" while (length $a < 3);

170:169
03/05/02 22:38
あ、これじゃ for (A..Z) の説明にはならないな。

171:名無しさん@お腹いっぱい。
03/05/02 22:50
>>166
全然正規表現じゃなかった・・・。

172:名無しさん@お腹いっぱい。
03/05/04 07:28
/\x82\xad\x82\xbb\x82\xc1/
sjis


173:名無しさん@お腹いっぱい。
03/05/05 11:59
>>172
パターンマッチさせる意味は?

174:名無しさん@お腹いっぱい。
03/05/05 18:39
>>172
1) ネタがないから
2) わし166だので、172に揶揄されて「くそっ」と


175:名無しさん@お腹いっぱい。
03/05/05 18:44
ちがった、171にバカにされて・・・
      ~~~


176:名無しさん@お腹いっぱい。
03/05/05 19:18
おまえらみんな(ち|い|う)んぽ。

177:名無しさん@お腹いっぱい。
03/05/07 16:30
『詳説 正規表現』を読んでいるようなエキスパートの人に質問です。


「"a" が偶数個、"b" が奇数個含まれる、すべての文字列を表す正規表現」


って分かりますか?

自分は答えを見てもよく分かりませんでした。


178:名無しさん@お腹いっぱい。
03/05/07 17:37
まずどのような「状態」があるのかを考える。この場合は
 1. aが偶数個、bが偶数個
 2. aが偶数個、bが奇数個
 3. aが奇数個、bが奇数個
 4. aが奇数個、bが偶数個
で初期状態が1でゴールが2となる。
まず最初に1から2に行くには /b/ の1通り。aが来ると4に行く。
4からスタートして1もしくは3を経由し2へ行く最短パターンは /(aa|bb)*(ab|ba)/
以上から /b|a(aa|bb)*(ab|ba)/ が状態2に行き着く最短パターン。←第1段階
次に状態2からスタートして考えると /aa/ で3を経由して2へ戻り、
/bb/ で1を経由して2へ戻り、/ab|ba/ では4へ行ってしまう。
4へ行ってしまった後は先に考えた「2へ行く最短パターン」で帰って来れるので、
2から始まって2に戻るパターンは /aa|bb|(ab|ba)(aa|bb)*(ab|ba)/ となる。
これは0回以上起こり得ることを考慮して第1段階と結合すると
/(b|a(aa|bb)*(ab|ba))(aa|bb|(ab|ba)(aa|bb)*(ab|ba))*/

179:名無しさん@お腹いっぱい。
03/05/07 18:18
>>177
余裕があれば一度オートマトンに関する本を読んでみて。
URLリンク(www.amazon.co.jp)
の前半はすごくわかりやすいよ。

そこまでしなくても、一度 >>178 たんのいってることを
URLリンク(katsu.watanabe.name)
みたいな状態遷移図にしてみるといいかも。

180:177
03/05/07 21:15
自分がこの問題を見たのは古い UNIX MAGAZINE で、内容を簡単に引用しますと …

偶数か奇数かを調べるには文字の数を2で割った余りが0か1かという
決まった2つを調べればよいため、正規文法で記述することが可能。
なお、この文法では a に関して2つ、b に関しても2つの場合があるので、
2 x 2 = 4 つの記号(状態)を用いる。

A → aB   B → aA   C → aD   D → a
A → bC   B → bD   C → bA   D → aC
A → b                 D → bB

状態 A … a が偶数個で b が奇数個の文字列
状態 B … a が奇数個で b が奇数個の文字列
状態 C … a が偶数個で b が偶数個の文字列
状態 D … a が奇数個で b が偶数個の文字列

以上により答えは

((a|b(aa)*ab)(b(aa)*b)*(a|ba(aa)*b)|b(aa)*b)*((a|b(aa)*ab)(b(aa)*b)*ba|b)(aa)*

となる。

正規表現でうまく表現できない問題に当たったときは、いったん正規文法で記述してから
正規表現に変換すると解決できる場合も多い。


181:長いので分割。
03/05/07 21:17
… だそうです。

果たして↑の長い正規表現が >>178 さんの答えと同じものを表しているのかどうか
分かりませんけども。

>>179
有用な本と URL の紹介、ありがとうございました。


それにしても最初にパッと見て「この問題は有限個の状態で表せる」って思いつくかなぁ?
不思議だ。


182:名無しさん@お腹いっぱい。
03/05/07 21:36
>>181
> それにしても最初にパッと見て「この問題は有限個の状態で表せる」って思いつくかなぁ?
それはパッと見というよりは、冷静に分析してわかるものでしょ。
慣れれば一瞬で分析できるようになるかもしれんけど。

183:名無しさん@お腹いっぱい。
03/05/07 22:50
>>178,180
それは「aとbだけからなる文字列」について?


184:名無しさん@お腹いっぱい。
03/05/08 00:00
>>183 んなもん s/[ab]/[^ab]*&/ すりゃ良いだけじゃん

185:名無しさん@お腹いっぱい。
03/05/08 03:51
>>184
それって、正気表現でつか?


186:名無しさん@お腹いっぱい。
03/05/08 04:49
>>183 のために [^ab]* をはさみまくってたら、

「長すぎる行があります!」

っておこられたよ・・・


187:名無しさん@お腹いっぱい。
03/05/08 10:42
/[^ab]*(b|a([^ab]*(a[^ab]*a|b[^ab]*b))*[^ab]*(a[^ab]*b|b[^ab]*a))([^ab]*(a[^ab]*a|b[^ab]*b|[^ab]*(a[^ab]*b|b[^ab]*a)([^ab]*(a[^ab]*a|b[^ab]*b))*[^ab]*(a[^ab]*b|b[^ab]*a)))*/

188:名無しさん@お腹いっぱい。
03/05/08 12:54
>>187
それで baaabaaab がまっちすんの?

189:名無しさん@お腹いっぱい。
03/05/08 13:27
以下のようなデータから、著者の部分(最後の括弧から括弧まで)を
取り除きたいと思います。

木立(こだち)のなかに(夏目弱石)
山の上の芋粥(いもがゆ)(芥川蛇の介)

s/(.+?)$//;

ですとうまくいきません。perl5.6で、文字コードはeucです。
webprog板のPerl初心者スレで聞いたのですが、どうも解決しないのです。
どうしたらよいか教えていただければ幸いです。


190:名無しさん@お腹いっぱい。
03/05/08 13:40
>>189
セイキヒョーゲンの問題ではなくパールの問題っぽいですね。
そっちのスレ行った方がよいかも。
できるなら「うまくいきません」を再現させる
できるだけシンプルなコードを添付してほしいな


191:名無しさん@お腹いっぱい。
03/05/08 13:41
>>189
プログラム技術板にPerlの質問スレがある。webprogに特化したこと以外はそっ
ちの方がいい。

s/([^()]+?)$//;


192:名無しさん@お腹いっぱい。
03/05/08 13:44
Perl の正規表現では ( ) は、後で \1, \2, ... にマッチさせるための
メタ表記だから、括弧そのものにマッチさせたければ \( \) と書かなければ
ならない。(egrep や emacs とは逆)

193:名無しさん@お腹いっぱい。
03/05/08 13:44
>>190
では、Perlスレ行ってきます。って、unix板にはなかったんで、
プログラム板ですね。ありがとございますた。




194:名無しさん@お腹いっぱい。
03/05/08 13:47
あれれ板探してたら、2つもレスが。
>>191
それ、jperlなら動くんでしょうが、perl5.6ではだめでした。
>>192
いや、全角括弧なんです。


195:名無しさん@お腹いっぱい。
03/05/08 13:53
>>192
それは \x28 や \x29 の場合だけでしょう。
今でてきてるのは \xa1\xca と \x1a\xcb。
ちなみにperlの最短一致は
マッチの先頭位置を後ろにずらす効果がないので注意。

($b="abcabc")=~s/b.*?c$//;
print "$b\n"; # output "a"

189の要望はここで"abca"を出してほしいということで叶わない


196:189
03/05/08 14:10
>>195
>perlの最短一致は
>マッチの先頭位置を後ろにずらす効果がない

なるほど。では、>>189のコードは、

木立
山の上の芋粥

を出力してもいいはずですが、何も出力しない(何にもマッチしない)んです。
どうしてですか。よろしければ教えてくらさい。


197:名無しさん@お腹いっぱい。
03/05/08 14:14
s/(.+)(.+)$/\1/;

198:189
03/05/08 14:19
>>197
これだと、

木立
山の上の芋粥

になってしまいます。求めているのは、

木立(こだち)のなかに
山の上の芋粥(いもがゆ)

です。


199:197
03/05/08 14:22
マジ? 手元の Perl 5.005_03 だと求めているのになるのだが・・・

200:189
03/05/08 14:28
>>199
すみませ~ん。
求めているものになりました。いろんなスクリプト混ざり合ってたので
混乱しました。
(.+)が最長一致するから(.+)でいいってことに気づきませんでした。



201:名無しさん@お腹いっぱい。
03/05/08 14:45
perlの正規表現と日本語文字列との相性の悪さを
実感する問題だったなあ

202:192
03/05/08 14:50
本当に全角だったのか。失礼。だとすると、/(/ が EUC の 2 バイト目と
文字に一致するとは限らないので注意。全角文字の 2 バイト目と次の文字の
1 バイト目がそれぞれ \xa1 と [\xca-\xcb] にマッチする場合があるので、
文字列「検便」\b8\a1\xca\xd8 にも「(」がマッチしてしまう。

日本語 EUC の 1 文字 にマッチさせたいなら、厳密には
(\x8f?[\xa1-\xfe]{2}|\x8e[\xa1-\xfe]|[\x00-\xff])
にマッチさせなくてはならない。

Perl6 の国際化された正規表現が普及して、こんな知識は不要になって
くれれば一番いいのだが…。

203:192
03/05/08 14:56
この例の場合、最後の括弧の中は全角ひらがなしか入らないから関係ないけどね。

204:名無しさん@お腹いっぱい。
03/05/08 15:51
5.8ならuse utf-8; use Encode;して適切なエンコード指定でファイル読み込ませれば解決するぞ。

205:名無しさん@お腹いっぱい。
03/05/08 21:50
URLリンク(61.210.205.4)
これなんだろ@@@

206:名無しさん@お腹いっぱい。
03/05/08 23:46
WebProg板の「正規表現道場@2ch Part2」はご存知?
スレリンク(php板)

207:189
03/05/09 15:02
>>206
知ってます。最近、書き込み少ないので、こっちにしました。
あっちでは、以前、いろいろ答えてあげてたんですが。
実は、他のやり方ならいろいろ考え付いたのですが、
s/(.+?)$//;
がなぜだめかが知りたくて質問したのでした。
>>195だけがその質問に答えてくれました。そいえば、それも
らくだ本で読んだ覚えあったなぁと。しかし、「最短一致がマッ
チの先頭部分を後ろにずらしてくれない」という理由ですと、
なぜ、「木立(こだち)のなかに(夏目弱石)」が、「木立」
にならないか、いまだに不明です。($b="abcabc")=~s/b.*?c$//;
で$bが'a'になるんだから、そうなってもいいはずですよね。

# でも、3つのスレで「()をエスケープしろ」っていう返事をもらったのにも
# びっくり。漏れは、navi2chなので、半角と全角は一目瞭然ですが、IEで見
# てみたら、たしかに女滋養に見えますた。


208:名無しさん@お腹いっぱい。
03/05/09 15:32
女滋養(;´Д`)ハァハァ

209:名無しさん@お腹いっぱい。
03/05/09 17:39
生粋のプログラマーなら日常的に半角全角の違いがすぐ分かる環境を望む。
そうじゃない人はあまり気にしないので女痔用に見えても兵器。


210:名無しさん@Meadow
03/05/09 17:52
女痔用 (´;。;△;。;)キモ!!!!!!!!!!!!!!!

211:名無しさん@Meadow
03/05/09 21:33
>>207
漏れは、navi2chでも迷ったっぞい。



212:189=207
03/05/09 22:20
>>211
はっきり言っておくんなさい。
たすかに、fontの問題かもすれんですよ。
だかーら、記号類は半角とか全角とか注釈つけとけと…
でもって、半角カタカナなんか問題ない時代になったんだなー、と。


213:名無しさん@お腹いっぱい。
03/05/11 04:17
半角か全角かをいちいち説明されないと違いの分からないような
素人さんにはそもそも質問なんかされてないんですよ

214:名無しさん@お腹いっぱい。
03/05/11 15:57
189が意図的に使い分けてるという保証もなかったわけだが。

215:名無しさん@お腹いっぱい。
03/05/11 16:17
>>214
はじめから euc と断ってたし、
対象テキストデータとか試しに提示したダメコード片を良く見れば、
意図的に使い分けてることは十分想像できたと思うが。
質問の仕方や内容からも半角全角混同してるようなレベルの質問とは思えなかった。

つうか、>>207 は何をいまだにハマってるんだ?
s/(.+?)$//; なら「木立」になるから問題なかろう?

216:191=214
03/05/11 16:20
>>215
一応そう想定して答えた。

217:名無しさん@お腹いっぱい。
03/05/11 16:40
>>216
釈迦に説法か。スマソ

218:189=207
03/05/11 18:24
>>215
いえ、それが、全行出力されちゃうんです。
ちょっと、やってみていただけませんか。(インデントはわざとしません。)
---
while(<DATA>) {
chomp;
s/(.+?)$//;
print "$_\n";
}
__DATA__
木立(こだち)のなかに(夏目弱石)
山の上の芋粥(いもがゆ)(芥川蛇の介)


219:215
03/05/11 18:36
>>218
ん~、なんないよ (5.005_03) 。
5.6 を試す環境が無いので申し訳ないでつが、Perl のバージョンの問題?

220:名無しさん@お腹いっぱい。
03/05/11 19:16
>>218
5.6.0 で試したらそのまま出ますた。
これまでの経緯をちゃんと読んでないんだが、 s/([^)]+)$//; じゃダメ?


221:名無しさん@お腹いっぱい。
03/05/11 19:23
>>220
それだと、 [^)] の部分は [^\xa1\xcb] なのでダメだと思われ。

>>204 の方法だとうまくいくようになるの?

222:名無しさん@お腹いっぱい。
03/05/11 21:08
>>218
5.8.0だと、191の式でうまくいくんだがなぁ。

while(<DATA>) {
chomp;
s/([^()]+)$//;
print "$_\n";
}
__DATA__
木立(こだち)のなかに(夏目弱石)
山の上の芋粥(いもがゆ)(芥川蛇の介)


木立(こだち)のなかに
山の上の芋粥(いもがゆ)

223:189=207
03/05/11 21:30
追試どうもです。

>>219
古いマシンに5.005_03(5.005_03 built for i386-linux)もあったのでやっ
てみたら、奇妙なことに。
euc-jp-dos、shift_jis-unix → OK
euc-jp-unix、shift_jis-dos → 行全体が出てくる

v5.6.0 built for MSWin32-x86-multi-threadおよびv5.6.1 built for
cygwin-multiでは、どれでもだめです(行全体が出てくる)。文字コードutf8
にしても同じ。

>>222
こりゃもう5.8にするべきですかね。




224:名無しさん@お腹いっぱい。
03/05/11 21:31
>>222
いやいや、たまたまうまくいっているように見えるだけでしょ。
>>202 さんのを参考にしる。

225:195
03/05/12 09:32
>>218
s/(.*?.)$//;
にしとけ
perlのバグだ
暇ならソースのMINMODあたり追いかけて

226:189=207
03/05/12 21:13
>>225
ありがとん。「。」毎に改行入れようとして、s/(.+?。)//;やってみたが、こ
れすらできんかった。結局、perl5.6以上はjperlないから日本語処理を中心に
してる場合は、使えないってことかなぁ。もち、~ohzakiさんとこに書いてあ
るような注意をしたり、半角文字で置き換えたりすれば使えるげど、面どい。



227:名無しさん@お腹いっぱい。
03/05/12 23:01
>>226
5.8にしてEncodeつかう。

228:名無しさん@お腹いっぱい。
03/05/13 02:04
>>226
> 結局、perl5.6以上はjperlないから日本語処理を中心にしてる場合は、
> 使えないってことかなぁ。

違うっしょ。

229:189=207
03/05/13 07:23
>>227
やってみまつ。
>>228
じゃ、jperlでできるs/.+?[。!?]/$1\n/g;あたり、どやってやる?
めんどいでしょ。




230:189=207
03/05/13 07:24
あら、s/.+?[。!?]/$&\n/g;だった。


231:名無しさん@お腹いっぱい。
03/05/13 11:05
>>229
あぁ、そういう話か。それはその通りですね。

でも、それは 5.8 の Encode とやらを使うと解決するってことなのでは。
っつーか、漏れは 5.8 動かせる環境無いので確認しようがないんでつが、
誰一人として Encode が一体何者なのか説明しようとしないのは何故?

232:名無しさん@お腹いっぱい。
03/05/13 11:39
>>231
use utf-8; use Encode;
my $ENC = 'euc-jp'; # or 'cp932'
binmode STDOUT, ":encoding($ENC)"; binmode STDIN, ":encoding($ENC)";

普通に標準入出力にアクセスすればOK。スクリプト内に日本語書くときはUTF-8で。
っていうかperldoc嫁

233:名無しさん@お腹いっぱい。
03/05/14 01:43
>>232
perl 5.6 では不可能ということか?

234:189=207
03/05/14 08:50
>>232
まだ、5.8を試してないんですが、>>232って、euc-jpの端末でeuc-jpのスクリ
プト書いて、perlにutf-8で処理させるってことですね。utfサポートは、5.6
からあるので、mule-ucs+bdfフォントで、emacs上でprocess-coding-system
(inputもoutputも)もutf-8にして、やってみたけどだめですた。

私が問題にしているのは、[](文字クラス)や+?、*?(最短一致)がマルチバ
イトに対応しているかどうかということなのですが・・・


235:名無しさん@お腹いっぱい。
03/05/14 10:15
>>234 5.6時代から既に対応している

236:189=207
03/05/14 10:57
>>235
[](文字クラス)をテストしてみたけど、だめです。
utf-8で以下のスクリプト実行して見れ。jperlではOKですが・・・
---------
while(<DATA>) {
chomp;
while (s/.+?[。!?]//) {
print "$&\n";
}
print;
}
__DATA__
utf-8で処理させて下さいね。5.6でね。utfサポートは、
5.6からあるけど、このスクリプトだめぽ!>>235は、何が
5.6時代から既に対応しているって言ってんの?変だよ。


237:名無しさん@お腹いっぱい。
03/05/14 11:10
>>236 use utf8; してる?

238:189=207
03/05/14 11:24
>>237
してなかったっす。
みなさん、ごめんなさ。


239:名無しさん@お腹いっぱい。
03/05/14 17:10
perl 質問スレにするなよ。

240:名無しさん@お腹いっぱい。
03/05/15 19:55
というわけで、これにて終了。
正規表現スレはここまでです。
あれ?


241:名無しさん@お腹いっぱい。
03/05/16 01:42
単語に「マッチしない」のは
どうやれば? ^\<word\>
じゃないし。


242:名無しさん@お腹いっぱい。
03/05/16 03:07
>>241
そりを正規表現(だけ)で実現するのは難しいのでは?

普通は、grep なら -v とか、スクリプト言語なら !~ /word/ とかするんじゃないかと。

243:189=207
03/05/16 08:24
>>241
perlの拡張正規表現を使えば出来るよ。
/^(?!.*word)/



244:あぼーん
あぼーん
あぼーん

245:名無しさん@お腹いっぱい。
03/05/24 22:45
オ来リーの者じゃありませんが・・・

『詳説 正規表現 第2版』

Jeffrey E. F. Friedl 著
田和 勝 訳

2003年5月発行 -- 5月27日発売
464ページ
本体価格5,400円
ISBN4-87311-130-7

テキストやデータの処理に欠かせない強力なツールとして瞬く間
に普及した「正規表現」。現在ではPerl、Java、VB.NETやC#など
数多くの言語やツールに標準で装備されています。その幅広い可
用性、柔軟性と比類ない強力さにもかかわらず、実際に正規表現
を使いこなすことは難しいです。本書は正規表現の概念を詳細に
掘り下げる一方で、数多くの言語やツールの実例を示しながら、
正規表現についての理解を深める解説書です。第2版では、豊富
な実例を使い、詳しくていねいに解説するスタイルはそのままに、
Perl5.8の新機能に加え、Javaと.NETの正規表現にもそれぞれ独
立した章を設けるなど、全編にわたって大幅に加筆がなされまし
た。正規表現の本質を読み解く決定版です。とくに正規表現を使
いこなしていると自負している人にほど読んでほしい本です。


246:名無しさん@お腹いっぱい。
03/05/25 00:29
あれ?今日買ってきたんだけど27日発売だったのね…

247:名無しさん@お腹いっぱい。
03/05/25 00:43
>>246
つーことで発売記念age

248:名無しさん@お腹いっぱい。
03/05/25 03:23
素数にマッチする正規表現募集。

249:名無しさん@お腹いっぱい。
03/05/25 03:38
>>245
第1版と比較してのレビューきぼんぬ

250:名無しさん@お腹いっぱい。
03/05/25 03:44
>>249
> 2003年5月発行 -- 5月27日発売
とあるからまだ無理なのでは

251:名無しさん@お腹いっぱい。
03/05/25 03:49
>>248
正規表現だけでなく、なんかしら言語使ってやればよい。

252:名無しさん@お腹いっぱい。
03/05/25 03:56
>>248
何故敢えて茨の道を行くのか?

253:名無しさん@お腹いっぱい。
03/05/25 05:07
>>245
これの第1版買ったのですが、いまいち難しかったです。
もっと易しい本ってないですか?

254:名無しさん@お腹いっぱい。
03/05/25 05:35
>>253
Ruby の初・中級者なら、「Ruby Magic―Rubyで極める正規表現」はお勧め。

255:245
03/05/25 10:21
>>249
第1版を持ってないので比較は出来ないっす。
# 買おうと思ったら第2版が出ることを知ったので待ったのだ。

ここに特徴や目次が紹介されているので見てもらうとして
  URLリンク(www.oreilly.co.jp)
  URLリンク(www.oreilly.co.jp)

まえがきから第1版との違いを判断すると
  - Unicodeのちょっとした解説
  - Perl5.003からPerl5.8対応に
  - Java1.4のjava.util.regexと、その他6つの正規表現パッケージの比較
  - .NET framework正規表現の特徴と問題点、M$のドキュメント(貧弱らしい)の補足
のように言語サポートが新しくなった/増えたって感じ。

最初はHTMLのサンプルを少々追加する程度の予定(3ヶ月の見込み)だったみたいだけど、
結局は2年の歳月をかけて全面的に加筆修正することになったそうだ。

難易度は第1版と変わらないのではないかな?
# 読み易くなってるのかもしれないけど。。
>>253の期待には応えられないと思う。
> とくに正規表現を使いこなしていると自負している人にほど読んでほしい本です。
という宣伝文句があるくらいだしね。

>>250
いや、24日に買えたのよ。

256:名無しさん@お腹いっぱい。
03/05/27 11:05
今日発売か。
昼休みに買ってくるか。


257:名無しさん@お腹いっぱい。
03/05/27 21:10
>>256さん、どうですた?


258:249
03/05/27 21:28
>>255 さんのと、今日立ち読みした感じで、第2版も購入することにしますた。
そういえば、翻訳者 (監訳者) が変わってたんですね。

259:名無しさん@お腹いっぱい。
03/05/27 21:29
sed のタグ付き正規表現についてちょっと教えれ。たとえば、

{________I'm_dreaming_of_a_White_Christmas_}
{_Just_like_the_ones_I_used_to_know__}
{____Where_the_tree_tops_glisten_}

の前後の余計な _ のトリミングをしようと思って
sed 's/{\(_*\)\(.*\)\(_*\)}/{\2}/g'
とやっても意図した結果にならない。\2 をうまくマッチさせる方法は?

まぁこの例なら簡単に逃げられる - たとえば sed 's/{_*/{/;s/_*}/}/' -
わけだが、apache の log とかの簡単なパース(並び替えとかそんな程度)を
タグ付き正規表現でさくっと処理できれば楽でうれしい。よろしく。

260:名無しさん@お腹いっぱい。
03/05/27 21:38
二個目の*がlongest matchしようとして
3個目の*にmatchさせたいであろう_まで持っていってしまうのが原因。

sed -e 's/{_*\(.*[^_]\)_*}/\1/'

261:名無しさん@お腹いっぱい。
03/05/28 00:59
'<,'>s@^@//@

262:名無しさん@お腹いっぱい。
03/05/28 01:03
最少マッチって perl とか ruby にしかない?
sed, grep 等の伝統的 tool にはないの?

263:名無しさん@お腹いっぱい。
03/05/28 01:07
>>262
ないよ

264:名無しさん@お腹いっぱい。
03/05/28 14:45
>>262
grepに最小一致の機能があったとして
それの魅力はイッタイ何なのだろうか?


265:あぼーん
あぼーん
あぼーん

266:262
03/05/28 20:42
確かに sed では使っても grep では使わないかも。
いや、でも後方参照する時に必要なこともありえますね。


267:名無しさん@お腹いっぱい。
03/05/29 10:14
>>257
昼休みにいきつけの書店にいったが売ってなかったんで。
帰りに別の書店で買った。
でもまだ読んでない…
通勤時間に読むっつーてもあれを毎日持ち歩くのは
重たいしなぁ。


268:名無しさん@お腹いっぱい。
03/05/30 21:59
文字列中、丸括弧(全角、半角問わず)で閉じられた部分を取り出す表現を考えているけど、うまくマッチしてくれない。
(丸括弧の中に丸括弧は含まない。Perlの正規表現を使用)

$string = '(22(1)';
if($string =~ /[((]([^()()]*)[))]/){
print $1;
}
else{
print "No match..";
}

この場合は"1"がマッチするのを期待しているのだけど、なぜか"22"の部分がマッチした。
OS(UNIX/WinXP)、Perlのバージョン(5.0/5.8)の異なる環境で同じことを確認したけど、結果は変わらず。
さらに、文字コード(Shift-JIS/EUC)の違いでも、結果は変わらなかった。

"1"をマッチさせる別の表現はないですかね?

# 全角"("の中にどうも半角")"の文字が隠れてるのかなぁ?(あくまでも推測)



269:名無しさん@お腹いっぱい。
03/05/30 22:42
>>268
おめな、2byte文字と1byte文字が同じに扱われると思ってるらしいな。たぶん、
文系のドキュソだな。しかも、すぐ上で2byte文字コードの話出てたの見てね
えな。こいう、初心者質問は、webprogのPerl初心者スレ逝け。



270:名無しさん@お腹いっぱい。
03/06/05 14:26
>>268
Perl5.8.0 + UTF8 でやったら 1 になったよ。


271:名無しさん@お腹いっぱい。
03/06/07 12:10
[ ] のなかに '-' と ']' の両方を入れたい場合はどうすればいいのですか?

272:名無しさん@お腹いっぱい。
03/06/07 12:20
>>271
何で?

273:名無しさん@お腹いっぱい。
03/06/07 12:29
>>271
[]-]

274:名無しさん@お腹いっぱい。
03/06/17 23:25
>>271
!.-[

275:名無しさん@お腹いっぱい。
03/07/03 21:13
保守

276:名無しさん@お腹いっぱい。
03/07/08 11:49
regexp ml盛り上がってますね。読んでて楽しい。


277:名無しさん@お腹いっぱい。
03/07/08 14:02
このスレはいつからまともな人たちをヲチするようになったのですか?

278:名無しさん@お腹いっぱい。
03/07/12 21:26
すいません、テキストファイルの中の .bananaなどの単語(行頭ではなく)の先頭が
ドットがあるものだけをgrepで抜き出したいのですが、jp.appleのような単語までひっかかって
しまい上手く絞り込めません。

アドバイスをお願いします!!

279:名無しさん@お腹いっぱい。
03/07/12 21:54
>>278
\b?\.\w+?
で、どうじゃろ?

280:名無しさん@お腹いっぱい。
03/07/12 22:44
>>279
すいません、なんか上手くいかないです。
ls -laでディレクトリ内の全ファイルを表示して、grepで隠しファイルだけを抽出したかったのですが。

281:名無しさん@お腹いっぱい。
03/07/12 23:34
ls -la | grep ' \.'
ではあかんの?


282:名無しさん@お腹いっぱい。
03/07/12 23:57
>>281
行のどこかに"."があれるとヒットしてしまうんです

283:名無しさん@お腹いっぱい。
03/07/13 00:28
ls -la | grep '^\.'
こういうこと?

284:名無しさん@お腹いっぱい。
03/07/13 00:28
>>282
とはいえ、"."って、ファイル名にしかでてこないよね?
>>281 をよーくみる。


285:283
03/07/13 00:30
間違えた。

ls -1a | grep '^\.'
これか
ls -la | grep ' \.'
これだな。下は余計なものを拾う可能性もあるが。

286:名無しさん@お腹いっぱい。
03/07/13 00:31
ls -d .*
なんてね。


287:名無しさん@お腹いっぱい。
03/07/13 00:32
あ、正規表現スレだった。すまん。

288:名無しさん@お腹いっぱい。
03/07/13 02:00
ヤハリココハオモッテタトオリバカバッカリダッタナ(プ

289:名無しさん@お腹いっぱい。
03/07/13 02:57
ls -la | awk '$9 ~ /^\./{print $0}' はどうよ。

290:名無しさん@お腹いっぱい。
03/07/13 11:30
>>280 ふつーそういうときは ls つかわず findつかえ。
find ./ -type f -name "\.*" -print


291:名無しさん@お腹いっぱい。
03/07/13 14:36
(())

292:名無しさん@お腹いっぱい。
03/07/14 11:38
>>290 ふつーそういうときは >> つかわず >> つかえ。

293:名無しさん@お腹いっぱい。
03/07/14 19:04
backreferenceを前方参照と訳したのはなぜですか?


294:名無しさん@お腹いっぱい。
03/07/14 21:19
後方参照としている訳もあるよ。
まぁ、現在の位置よりも前を参照するという意味では
日本語的には前方参照であってると思う。
ようするに「今いる位置より戻って参照」って意味になるんだから。

んでも、意味を考えて訳すなら「戻って参照」とか、どう?

295:名無しさん@お腹いっぱい。
03/07/14 21:32
>>294
ちょっと前にCスレで話題になったんだけど、Cで「前方参照」といった場合の前方って、
ファイルの終端方向を指す。「ひどい訳語だ」ってことで話は終わったんだけど、
正規表現でも混乱が見られるしなんかいい言葉ないもんかねえ。

日本語では時間を表す文脈で「前」にまるで正反対の意味があるからよくないのだと思う。
「以前」だと過去だし「前進」だと未来だし。

あとこれはすれ違いか? そうだよね。すまん。

296:名無しさん@お腹いっぱい。
03/07/14 21:41
>>279 >>281 >>283 >>284 >>285 >>286 >>287 >>289 >>290

みなさま、ありがとうございます。

シングルクォーテーションに空白が使えたり、
アッパーチルダとハット(キャレット?)の区別を知ったりと、
正規表現の難しさを知りました。

今、「テキストデータ料理学」っていう古い本を読んでいるのですが、
オライリーの正規表現本は買ったほうがいいですか?

(もう2~3週間前にオライリーのサイトでカタログを注文したのに、
まだ来ない…)

297:名無しさん@お腹いっぱい。
03/07/14 22:23
おれは初版も新しいのも持ってるけど、自分の知識に自信がないうちは
お薦めしない。もちろんあったらあったで便利だけど。

やっぱり、「俺、正規表現バリバリだぜーYAH」状態で買って読んで
目からうろこ落ちまくり感を堪能するのがいいんではないかと。

298:名無しさん@お腹いっぱい。
03/07/14 23:31
>294
するってえと、正規表現的には日本語で前方参照あるいは後方参照と書いてあったら
どっちもbackreferenceと思えってわけだぁね。
>295
計算機分野だと「前方」という言葉はforwardの訳語というのがあたりめえだと思ってたから、
正規表現関係だと、「前方参照」がbackreferenceのことだっていうのがわかんなくて
難儀したってわけよ。


299:名無しさん@お腹いっぱい。
03/07/14 23:33
>>297
>>296は学ぶ意欲を持っているから、今のうちに買っておいて損はないと思う。
むしろ薦める。
オイラリーはハズレが少ないからな。

300:名無しさん@お腹いっぱい。
03/07/14 23:35
>>298
俺はperlから入ったから後方参照が当たり前かと思ってた。
他言語使うようになってから吃驚したってわけよ。

301:298
03/07/14 23:43
perl5の日本語マニュアルで、「前方参照」を "lookahead assertion"の訳語として
使っているやつがあった。

(?=regexp) 長さの無い、前方参照位置指定子。
(?!regexp) 長さの無い、前方参照否定位置指定子。

英語だと

(?=pattern) A zero-width positive lookahead assertion.
(?!pattern) A zero-width negative lookahead assertion.

わけわかんねぇな(w


302:298
03/07/14 23:48
ありゃりゃ?

(?<=pattern) A zero-width positive lookbehind assertion.
(?<!pattern) A zero-width negative lookbehind assertion.

"lookbehind assertion" の訳語って何だ?


303:名無しさん@お腹いっぱい。
03/07/15 00:32
「俺の背後に立つな」
デューク東郷の格言だろ。

304:名無しさん@お腹いっぱい。
03/07/15 00:35
lookahead 見越し
lookbehind 見返り

305:名無しさん@お腹いっぱい。
03/07/15 01:01
前後不覚だな。

306:名無しさん@お腹いっぱい。
03/07/15 03:12
>>296
>オライリーの正規表現本は買ったほうがいいですか?

持ってなくても覚えられるし、
エディタのサーチとか grep とかで実験しながら
感覚的に慣れるのも悪くないんじゃない?

ただし emacs で覚え始めるのはすすめない。
backslash で混乱する。

307:名無しさん@お腹いっぱい。
03/07/15 07:21
>>297
>>299
>>306
ちょっと大きな本屋に行って立ち読みしてみます。
ありがとうございました~

308:あぼーん
あぼーん
あぼーん

309:名無しさん@お腹いっぱい。
03/07/17 13:35
>>308
二度と目を覚ますな。


310:あぼーん
あぼーん
あぼーん

311:名無しさん@お腹いっぱい。
03/07/20 21:36
さげ保守

312:名無しさん@お腹いっぱい。
03/07/27 22:01
OOはもうすぐ1.1出るけど、MSWORDよりセキュリティ大丈夫かな?
スレリンク(bsoft板:392番)


313:あぼーん
あぼーん
あぼーん

314:高校生
03/08/02 17:12
boo
baa
baz
っていうテキストが例だとして、sedを用いて、
booまたはbaz、っていう正規表現はどうなるの?
rubyやperlならパイプ記号で条件和の表現が出るけど、
同じように書いてもsedに誤解されてしまう。

315:名無しさん@お腹いっぱい。
03/08/02 17:52
>>314 ん? \|使えば良いのでは


316:高校生
03/08/02 18:06
sed 's/boo\|baa/hoge/g' ./hage.txt
とかだとやっぱりだめなんすよね。
「boo」とかの単語の括り方がよくわからんのです。

317:名無しさん@お腹いっぱい。
03/08/02 20:53
GNU sed 4.0.7版 ではそれでもできてるけどな。
sed 's/\(boo\|baa\)/hoge/g' これでどう?


318:名無しさん@お腹いっぱい。
03/08/02 22:07
>>317
gsedならできるがsedは食ってくれない。

319:名無しさん@お腹いっぱい。
03/08/03 01:09
単一の正規表現じゃなきゃいかんの?
sedと決まってるなら
sed -e 's/boo/hoge/g' -e 's/baa/hoge/g'
でいいんちゃう?

置換後の文字列と置換前の文字列の片方とで重なりがある場合
どうするかひとしきりモメたりする ↓↓↓ のがお決まりだな。

320:名無しさん@お腹いっぱい。
03/08/03 09:52
単一の正規表現でないと記述が冗長で見た目がキモイ、
っていうのはあると思うよ。
おいらはインストール直後のFreeBSDの環境構築をスクリプトに任せたくて、
結局シェルスクリプトにawkな記述を書いて解決した。
カーネルの再構築にしても、/etc/下の記述にしても、要はテキストの置換なわけで。
本当はrubyがFreeBSDの/usr/bin下にあるようなご時世だったら
楽ができるんだけど、そこら辺は個人的な勉強不足だなぁ。

321:名無しさん@お腹いっぱい。
03/08/13 19:13
{a,b}上の言語Lが
『aaで開始し、かつ、bbを部分列として含む』という条件を満たす語からなるとき
Lを表す正規表現ってどうなるの?
L=aa(a*b*+bb)* ?

322:名無しさん@お腹いっぱい。
03/08/13 20:45
L=aa(a+b)*bb(a+b)*

323:名無しさん@お腹いっぱい。
03/08/13 22:05
>>321
*+ ???

324:名無しさん@お腹いっぱい。
03/08/13 23:05
>323
'+'より'|'のほうが普通かな。
L=aa(a|b)*bb(a|b)*

本来的には連接、選択、閉包が表現できればいい。


325:名無しさん@お腹いっぱい。
03/08/13 23:08
L ::= aA
A ::= aB
B ::= aB | bC
C ::= aB | bD
D ::= ε | aD | bD


326:名無しさん@お腹いっぱい。
03/08/13 23:34
.*
何にでもマッチする最強の正規表現です!


327:名無しさん@お腹いっぱい。
03/08/13 23:50
>>326
ドットが含まれてなかったらマッチしない罠


328:名無しさん@お腹いっぱい。
03/08/13 23:53
キター

329:名無しさん@お腹いっぱい。
03/08/14 00:13
ageてるし、ネタと見た。

330:名無しさん@お腹いっぱい。
03/08/14 23:29
>>329
しね!

331:あぼーん
あぼーん
あぼーん

332:あぼーん
あぼーん
あぼーん

333:名無しさん@お腹いっぱい。
03/08/28 20:12
うまづら。

334:名無しさん@お腹いっぱい。
03/09/02 03:30
ほす。

335:名無しさん@お腹いっぱい。
03/09/14 04:27
☆湯

336:名無しさん@お腹いっぱい。
03/09/16 13:49
[ruby-list:38393] じゃないけど、[a-z] みたいな文字クラスの表現は、
EBCDIC とかだと「意図した通り」には動かないと思うんだけど、
ASCII か ASCII を包含したキャラクタセットという前提で書くべきものなの?

337:名無しさん@お腹いっぱい。
03/09/16 14:08
>>336
[:lower:] とかは使っちゃだめ?

338:名無しさん@お腹いっぱい。
03/09/16 15:34
>>337
あ、いや、質問が悪かったですね。
範囲指定する文字クラスはどうあるべき (書くべき) か?っていう話です。

ていうか、 re_format(7) を私の拙い英語力で読んでみたところ、
ASCII コードの並びを前提とするような文字クラスの範囲指定は、
portable じゃないからやらない方が良い、ということのようですね。

というわけで、極力 >>337 さんのみたいな文字クラス指定を使った方が良い、と。

339:名無しさん@お腹いっぱい。
03/09/20 10:41


340:名無しさん@お腹いっぱい。
03/10/08 15:50
保守

341:名無しさん@お腹いっぱい。
03/10/12 16:53
vimで"DEL"という文字列が含む行で、"DEL"以下を削除したい場合はどうしたらいいでしょうか?

342:名無しさん@お腹いっぱい。
03/10/12 17:15
スレ違い。


Vim6 Part6
スレリンク(unix板)

343:名無しさん@お腹いっぱい。
03/10/13 01:12
:%s/DEL.*//


344:名無しさん@お腹いっぱい。
03/10/13 15:10
>>343
サンクス、すみません。

345:名無しさん@お腹いっぱい。
03/10/18 17:51


346:名無しさん@お腹いっぱい。
03/10/21 23:12
>>343
DELは残したい場合はどうすればいいですか?

347:名無しさん@お腹いっぱい。
03/10/21 23:24
:%s/DEL.*/DEL/

348:名無しさん@お腹いっぱい。
03/11/05 11:20
MS-DOSが使われていた頃に、"mifes"と言うエディターが有った。
そのマニュアルに1頁ほどの正規表現の説明があって、自分は最初に、それで
覚えて使い出した。
使い始めの頃は、何回も間違えたけど、少しづつ慣れてきた。

自分の周りを見ても、プログラマを何年もやっていても正規表現を知らない
人は、結構いる。
一旦、覚えてしまうと非常に便利だと思うんだけど。

349:名無しさん@お腹いっぱい。
03/11/05 17:48
正規表現で俺の存在を抹消してくれ。

350:名無しさん@お腹いっぱい。
03/11/05 19:01
s/俺の存在//g;

351:名無しさん@お腹いっぱい。
03/11/05 20:10
gsub!(/俺の存在/, "")

352:名無しさん@お腹いっぱい。
03/11/18 18:31
捕手

353:名無しさん@お腹いっぱい。
03/11/19 01:38
        rー、
    」´ ̄`lー) \
    T¨L |_/⌒/
     `レ ̄`ヽ〈
       |  i__1
     _ゝ_/ ノ
      L__jイ´_ )
        |  イ
         |  ノ--、           r'⌒ヽ_
        ゝ、___ノ二7  /´ ̄l、_,/}:\
         |ーi |   l_/ /__ィ::.  ゝ~_ィ´:; ,ゝ
        __〉 {      (T´ |1:::.  \_>、};;_」
       'ー‐┘       ! ` ̄''ァ一 、\ ヽ}  ← 保守
               〈` ̄ ̄^`¬ノ .::〔 ̄´
                   1  ヽ   .:::レ  ヽ、
                |_イー-、_;;j|_:.   ゝ、
                __,,,... -- |. {――‐フゝ、   〉 -- ...,,,__
        _,, -‐ ´       ,r|__ト,    1ニノ ー'´       ` ‐- ,,_
    , ‐ ´         └―'´                     `


354:名無しさん@お腹いっぱい。
03/11/19 09:17
>>353
それ捕手じゃなくて投手やっ!www

355:名無しさん@お腹いっぱい。
03/12/04 19:24
別のスレからの引用
ps ax |grep '[s]shd'
とやると、grep自身の行にヒットしないそうだけど、なぜ?
sってメタ文字でもなんでもないのに。

356:名無しさん@お腹いっぱい。
03/12/04 19:30
なぜって言われても、自明だが。

357:名無しさん@お腹いっぱい。
03/12/04 19:33
grep sshd と何が違うの?

358:名無しさん@お腹いっぱい。
03/12/04 19:35
あ、ごめん、わかった(w


359:名無しさん@お腹いっぱい。
03/12/04 19:36
grep sshd だと、ps の出力に含まれる "grep sshd" の "sshd" がマッチする。

grep '[s]shd' だと、ps の出力には "grep [s]shd" が含まれるが、
この "[s]shd" は、[s]shd にはマッチしない。よね?わかる?

360:名無しさん@お腹いっぱい。
03/12/04 23:59
なるほど。トリックだな。


361:名無しさん@お腹いっぱい。
03/12/05 10:59
まあバッドノウハウだとも思うけどナー
URLリンク(www.namazu.org)


362:名無しさん@お腹いっぱい。
03/12/05 13:26
そこまでのものではないと思うけど、
この例だと、頭の中でpsの出力まで加工しちゃうからな(w


363:名無しさん@お腹いっぱい。
03/12/05 20:33
grep -v grep でええやん。

364:名無しさん@お腹いっぱい。
03/12/30 00:05
muttのaliasで
    alias keyword Name <mailaddress>
みたいなフォーマットで並んでいるファイルを
    alias keyword <mailaddress> # Name
に整形しようと思い,
    cat alias | sed 's![[:space:]]*alias[[:space:]]*\([^[:space:]]*\)[[:space:]]*\(.*\)[[:space:]]*<\(.*\)>!alias \1 <\3> # \2!' > alias.new
としました.

上手く行くんですが, "#" の位置が行ごとにバラバラなのが気持ち悪いです.

そのファイルで "#" 以前の文字数が一番長いものを調べ, そこに合わせて
その他の行の "#" 以降を持ってくるようにするにはどうすればいいんでしょうか?

365:名無しさん@お腹いっぱい。
03/12/30 00:14
sedでやれってか?
漏れはへたれなので、Perlなどを使ってしまうが(w


366:名無しさん@お腹いっぱい。
03/12/30 00:28
>>364
2パスでやれば?

367:名無しさん@お腹いっぱい。
03/12/30 09:20
  2パス?

368:名無しさん@お腹いっぱい。
03/12/30 16:05
>>367
"#" 以前が一番長いのを調べてから、それに合わせて整形し直せば。

369:名無しさん@お腹いっぱい。
04/01/11 21:57
>>364
70桁でそろえる場合

sed ':a /.\{70\}\#/!bc; b; :c s/\(.*\)\#\(.*\)$/\1 \#\2/; ta'

亀ですが、こんなんでどうでしょう


370:名無しさん@お腹いっぱい。
04/01/11 22:21
決め打ちでいいなら何の苦労もないわけで。

371:名無しさん@お腹いっぱい。
04/01/14 23:40
>>369
反則技。gawk で。sed ではどうやっても出来ないような気が……(_ _;)
# sed でできるのか?

{
a=index($0,"#");
if(a>best) {
best=a;
}
c[FNR]=$0
}

END {
for(i=0;i<=NR;i++){
x=index(c[i],"#");
if(x && x<best) {
for (j=x;j<best;j++) {
gsub("#"," #",c[i]);
}
}
print c[i]
}
}


372:名無しさん@お腹いっぱい。
04/01/15 23:45
( ´∀`)

373:名無しさん@お腹いっぱい。
04/02/03 10:33
保守

374:名無しさん@お腹いっぱい。
04/02/06 18:23
教えてください。
Windows用のファイルをemacsなんかで開いたとき,最下行に
^Z
という符号が表示されることがあります。
これはいったい何でしょうか?


375:名無しさん@お腹いっぱい。
04/02/06 19:31
いわゆるeof

376:名無しさん@お腹いっぱい。
04/02/06 21:01
>>375
ありがとうございます。この符号のあるファイル同士をcatで連結すると,途
中にこの符号が入ってしまいます。この符号をsedでマッチさせて消去したい
のですが,どうすればいいでしょうか。
sed '/^$/d' ではダメでした。


377:名無しさん@お腹いっぱい。
04/02/06 21:09
>>376
いわゆるeof

378:名無しさん@お腹いっぱい。
04/02/06 22:38
EOF符号をsedで消去できますか?


379:名無しさん@お腹いっぱい。
04/02/21 22:59
grep で使える正規表現を精密に解説したサイトはありますかね?
日本語/英語どっちでもいいのですが。

380:名無しさん@お腹いっぱい。
04/02/22 00:19
URLリンク(www.kt.rim.or.jp)

381:名無しさん@お腹いっぱい。
04/02/22 00:29
レベル低いなー
378に対して出来るとも出来ないとも言えないのか...


382:名無しさん@お腹いっぱい。
04/02/22 00:58
378=381 ですか?

383:名無しさん@お腹いっぱい。
04/02/22 02:14
>>378
できるよ。普通に
s/^Z//
とかすればいい。もちろん^ZはEOFの一文字ね。

こんなの試せばすぐわかるだろと思ってたんだが、よく>>376を読むと、
「正規表現は純なテキストであるべきで特殊記号を混ぜるのはイクナイ」
と感じたんだろうな。まあ気持ちはわかるわ。

最近の正規表現拡張では、文字をコードの数値で表現する文法が
入ってたりする方が普通(例えばperlとか)だもんな。

384:338
04/02/22 02:24
でね、特殊記号の特別なケースがtab。大昔は\tなんて表現なかったさ。
よく画面上の見た目やハードコピーや雑誌からシェルスクリプトを打ち直して、
tabとspaceの違いで動かないなんてことが時々あったんだよ。

あと勝手にシェルスクリプトを整形されて動かなくなるとか。


385:名無しさん@お腹いっぱい。
04/02/22 02:52
>>382
いいえ
>>383
ありがトン!


386:名無しさん@お腹いっぱい。
04/02/22 02:55
>>382
381=385 が正解


387:名無しさん@お腹いっぱい。
04/02/22 16:53
>>380
ブックマークにいれますた。

388:名無しさん@お腹いっぱい。
04/03/27 17:05
[\\w$'-]
これはどういうことなのでしょう?
[\w$'-]
ならわかるのですが..

389:名無しさん@お腹いっぱい。
04/03/27 17:09
>>388
処理系は何?

390:名無しさん@お腹いっぱい。
04/03/27 17:20
>>389
Rubyです
Regexp::compile("\b\d[\d\.]+\d\b|[\w]+|[\\w$'-]+")
scanメソッドで英文を分割してます

391:名無しさん@お腹いっぱい。
04/03/27 17:22
>>390
ほほう。バグってる悪寒。

392:名無しさん@お腹いっぱい。
04/03/27 17:25
Regexp::compile("\\b\\d[\\d\\.,]+\\d\\b")
こんなのがあるんですが..

393:名無しさん@お腹いっぱい。
04/03/27 18:30
>>392
Ruby で "..." の中で '\' を書くときは、'\' でエスケープする必要があるの。
つまり Regexp::compile("\\w") は /\w/ と同じ。

>>390 のだと '\' のエスケープが足りない部分があるように見える。
たとえば、 "\w" は "w" に、 "\b" は "\010" になっちゃう。
ので「バグってる悪寒」と言いました。

394:名無しさん@お腹いっぱい。
04/03/27 18:53
>>393
なるほど、必死に\\と重ねる正規表現について調べてましたよ
ありがとう


395:名無しさん@お腹いっぱい。
04/03/30 01:42
perl で質問です。

NOTE note "note" notes

上のような文字列を「book」だけを「note」に置換したいのですが
s/\bnote\b/book/g
のようにすると、ダブルクォートで囲まれているものも置換されてしまうのですが
それを

NOTE book "note" notes

のようにするにはどう表記すればよいのでしょうか?
詳しい方、教えてください。


396:名無しさん@お腹いっぱい。
04/03/30 04:15
>>395
> NOTE note "note" notes
>
> 上のような文字列を「book」だけを「note」に置換したいのですが

397:名無しさん@お腹いっぱい。
04/03/30 10:07
>>396
その下の
s/\bnote\b/book/g
ぐらい読んで多目にみてやれ。

>>395
とはいえ、仕様があいまいすぎ。
'note' はどうする? :note: は? "abc note def" は?

398:名無しさん@お腹いっぱい。
04/03/30 10:29
s/ note / book /g
か?

>>397
> とはいえ、仕様があいまいすぎ。
んだな。

399:名無しさん@お腹いっぱい。
04/03/30 12:34
>>395
s/(?=[^"])\bnote\b(?=[^"])/book/g;

# こんなんで良いわけないよなと思いつつ・・・

400:名無しさん@お腹いっぱい。
04/03/31 02:02
>>397

> とはいえ、仕様があいまいすぎ。

すいません、おっしゃるとおりです。
ある単語(note)をある単語(book)に置換したいのですが、
ダブルクォートで囲まれているもの("note")は、その置換からは除外したいのです。

> 'note' はどうする? :note: は? "abc note def" は?

したがいまして、これらはとりあえず想定外で構わないので置換してしまっても構いません。
もう少し昨日の例を詳しく書きますと

NOTE,note"note"notes-note

このようなものでも

NOTE,book"note"notes-book

のようになってくれるのを期待しています。

ただ、"abc note def" これも想定外で構わないのですが
対応が可能であるのなら、私の勉強の為に教えてくださるとありがたく思います。

>>399
ありがとうございます。

>s/(?=[^"])\bnote\b(?=[^"])/book/g;
これを試してみました。
基本的にOKかなと思ったのですが、行頭、行末では置換の対象となってくれませんでした。



401:名無しさん@お腹いっぱい。
04/03/31 02:52
>>400
補足です。
ここでいう単語とは \w+ で表せる範囲のもので、
アルファベット大文字、小文字も含めて完全に単語の
先頭から末尾までが一致するものです。


402:名無しさん@お腹いっぱい。
04/03/31 07:45
もっと簡単にできるかもしれないけど、
s/(^|(?<=[^\w"]))note\b|\bnote($|(?=[^\w"]))/book/g;
とかは?

> ただ、"abc note def" これも想定外で構わないのですが

後ろから数えた"の個数が奇数ならマッチしないようにして、
$b =~ s/\bnote\b(?=([^"]*"[^"]*")*[^"]*$)/book/g;
とすれば、"のマッチングが保証できる範囲ではなんとかなるかも。
前からの"の個数でマッチさせようとしたら、
可変長のlook-behindは実装してないらしい。(perl 5.8)


403:名無しさん@お腹いっぱい。
04/03/31 14:53
s/"note"/hogehoge/g
s/note/book/g
s/hogehoge/"note"/g
おれならこうしちゃうな。
考えんのめんどい。

404:名無しさん@お腹いっぱい。
04/04/01 01:10
>>402

ありがとうございました。
たいへん勉強になりました。


405:名無しさん@お腹いっぱい。
04/04/07 15:07
質問させてください。

&にはマッチして欲しいのですが、&にはマッチして欲しくないのです。

どのように記述すればよいのでしょう。

お願いします。

406:405
04/04/07 15:09
&にはマッチ
&amp;にはマッチしない

でした。すいません。

407:名無しさん@お腹いっぱい。
04/04/07 15:26
>>405
Perl5 でいい?

408:名無しさん@お腹いっぱい。
04/04/07 15:32
>>405
/&(?!amp;)/

409:名無しさん@お腹いっぱい。
04/04/11 13:22
正規表現のおすすめ書って何がありますか?

410:名無しさん@お腹いっぱい。
04/04/11 14:13
オライリーのやつ。

411:名無しさん@そうだ選挙に行こう
04/07/11 16:49
ワイルドカード(DOS)の *.txt って、正規表現だとどう書くの?

412:名無しさん@お腹いっぱい。
04/07/11 20:35
{(([0-9a-zA-Z]){0,})\.txt}とか半端に返してみるテスト

413:名無しさん@お腹いっぱい。
04/07/11 20:46
[^\\/]+\.[Tt][Xx][Tx]\z とか (ry

414:名無しさん@お腹いっぱい。
04/07/11 22:41
foo と bar 両方含む行をマッチさせたいんだけど、
awkでいうところの and演算子
% awk /foo/&&/bar/
が使える、windowsで動くgrepツールなんか教えてください。

#絞込み再検索のないGUIなgrepツールなんかイラネ

415:名無しさん@お腹いっぱい。
04/07/11 23:39
>>412,413
. 記号は \ でエスケープになるのですね。.*\.txt でマッチはしました。
助かりました、ありがとうです。

416:名無しさん@お腹いっぱい。
04/07/12 22:46
>>414

FIND "foo" | FIND "bar"

みたいのじゃ駄目?

417:名無しさん@お腹いっぱい。
04/07/14 00:51
>>414
|が使えるツールなら、/foo.*bar|bar.*foo/とかで近似できるんじゃないの。
CygwinのGNU grepで試してみた。

> cat foobar.txt
foo
bar
foo foo
foo bar
bar bar
bar foo
> grep -n "foo.*bar\|bar.*foo" foobar.txt
4:foo bar
6:bar foo
>

418:414
04/07/23 03:17
なるほど、andをorに展開すればいいのか。
しかし fooかつbarかつbazを検索、つーばあい展開すんのめんどくさいなぁ。

windowsのGUIなgrepツールは、サブフォルダも検索、とかできて
結構便利なのも歩けど、パイプとかorが使えなかったりしてイマイチ。

結局cygwinでawk使ってるけど、これもいまひとつメンドクサイ。
2chのログを検索してるだけなんだが_| ̄|○

419:名無しさん@お腹いっぱい。
04/07/29 01:12
>>418
xyzzy の ggrep 辺りがいいんじゃない?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch