全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50
正規表現 part2

1デフォルトの名無しさんsage2005/11/03(木) 23:31:36

関連スレ

UNIX板 正規表現
http://pc8.2ch.net/test/read.cgi/unix//

プログラマー板 【Regular】正規表現【Expression】
http://pc8.2ch.net/test/read.cgi/prog//

WebProg板 正規表現道場@2ch Part4
http://pc8.2ch.net/test/read.cgi/php//


前スレ
http://pc8.2ch.net/test/read.cgi/tech//
2デフォルトの名無しさんsage2005/11/03(木) 23:32:45
重複です。速やかに削除してください。
つーか1誌ね
3デフォルトの名無しさんsage2005/11/03(木) 23:38:26
駄ネタはこちら

性器表現 part2
http://pc8.2ch.net/test/read.cgi/tech//
4デフォルトの名無しさんsage2005/11/03(木) 23:38:27
重複。削除依頼出せよ>>1

性器表現 part2
http://pc8.2ch.net/test/read.cgi/tech//
5デフォルトの名無しさんsage2005/11/03(木) 23:38:52
>>2
重複してるのか?
6デフォルトの名無しさんsage2005/11/03(木) 23:41:16
>性器表現 part2
>http://pc8.2ch.net/test/read.cgi/tech//

↑の方を削除依頼すればいいのでは?
7デフォルトの名無しさんsage2005/11/04(金) 00:03:13
さすがにこっちが本家だな。何が重複だか。バカじゃねーの?
8デフォルトの名無しさんsage2005/11/04(金) 00:11:13
こんなことで喧嘩するなwww
9デフォルトの名無しさん2005/11/04(金) 02:48:53
10デフォルトの名無しさん2005/11/04(金) 13:53:13
0〜255までの数字を正規表現でどう表せばよいですか?
11デフォルトの名無しさんsage2005/11/04(金) 14:34:01
>>10
数字が 0 と正の整数だとして。

・(0|1|2|3ry
・([0-9]|[1-9][0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))

・0 <= x && x <= 255
12102005/11/04(金) 15:47:07
>>11
(2([0-4][0-9]|5[0-5])|1[0-9][0-9]|[1-9][0-9]|[0-9])
というように逆にしないとうまくいかないようです。

それは置いとくとして、これだと
2560 がヒットしてしまうのですよ
13デフォルトの名無しさんsage2005/11/04(金) 16:07:56
>>10
言語は? Perl なら (?:1¥d?¥d?|2(?:5[0-5]?|[0-4]?¥d?)|[3-9]¥d?|0)
1410sage2005/11/04(金) 16:20:22
>>13
言語は何でもいいよ。phpでも秀丸マクロでも。

逆にいえば、どの言語でもそこそこ動くよう
一般的?なパターン構文のみを使った
正規表現がいいな
15デフォルトの名無しさんsage2005/11/04(金) 16:37:15
>>12
頭と尻に[^0-9]付ければ良いだけちゃうの?
16デフォルトの名無しさんsage2005/11/04(金) 16:45:15
>>10
てか、正規表現でなければならない理由は何?
>>11 の最後が一番話が早いと思うが。
17デフォルトの名無しさんsage2005/11/04(金) 16:47:53
ipアドレスの正規表現なら前にあったような
1810sage2005/11/04(金) 17:44:44
>>16
>正規表現でなければならない理由は何?
なぜなら、ここが正規表現スレだから。
必要とか不必要とか、そんなこというなよ。ロマンチックじゃないぜ。
19デフォルトの名無しさんsage にせものか?2005/11/04(金) 18:12:48
>>10
じゃあスレ違い。他所へ行け。
2010sage2005/11/04(金) 18:20:27
>>19
あ?お前偉そうだな。
その調子なら他所でもやっていける。
お前こそこのスレからでてってくれ。
俺にこそこのスレは相応しい。
21デフォルトの名無しさんsage2005/11/04(金) 18:29:42
>>20
ほほぅ。
22デフォルトの名無しさんsage2005/11/04(金) 21:02:36
>>20
なるほどなるほど。
2310sage2005/11/04(金) 21:11:32
>>19
スレ違いと言われても・・・
こういう正規表現って他にも応用は効くと思うよ。

>>15のがいけると思ったけど、2560などを「マッチングさせない」ようにはできなかった。
^((2([0-4][0-9]|5[0-5]))|(1?[0-9]?[0-9]))$
入力が単語ならこれでいけた。サブパターンがいっぱい出来てうっとおしいけど
24C ◆ntztQrP5vg sage2005/11/07(月) 00:17:15
C#C#C#〜!
25デフォルトの名無しさんsage2005/11/13(日) 23:05:35
全てのシングルバイト文字にマッチさせるときは
[¥x0-¥xff]って書くんですか?
26デフォルトの名無しさんsage2005/11/13(日) 23:13:45
>>25
それ.と同じ
27デフォルトの名無しさんsage2005/11/13(日) 23:20:04
.は改行にはマッチしないでしょ
28デフォルトの名無しさんsage2005/11/14(月) 00:39:15
>>27
sedやawkなら.は改行にもマッチしますよ。探索空間が通常行単位なので、
行末の自然な改行とマッチしないように見えるだけでしょう。

sedならNなどで、awkなら変数に陽に改行を代入するなどしてお試しください。。

perlもマッチ演算子にsなどのoptionをつければ.が改行にもマッチします。
これも仕様をよくみると、普段は改行にマッチさせないというよりむしろ、
普段は探索空間を行単位にしていることからくると解釈すべきでしょう。
29デフォルトの名無しさんsage2005/11/24(木) 13:39:05
正規表現勉強中なのですが・・・
ソースの解析のように読み進んでって"if"来たから"ifルーチン"処理モードに入ってとか"void"来たからメソッド処理モードに入ってとかやるのは苦手?
30デフォルトの名無しさんsage2005/11/24(木) 13:44:32
>>29
無理すね。
そういう用途じゃないから。
正規表現は、あるクラスの文字列の集合(言語)を表現してるだけですから。
(で、たいていはパターンマッチに使う。)

ツール(sedなりperlなりlexなり)がそういうこと>>29やるために
正規表現を使うというstoryでしょう。
3129sage2005/11/24(木) 14:07:14
>>30
> ツール(sedなりperlなりlexなり)がそういうこと>>29やるために
> 正規表現を使うというstoryでしょう。
この場合、正規表現使うというのはどういう使い方なんでしょ?
たとえばifロジックの中の判断ルーチン部分が式の形になってるかどうかをチェックするために使うとか?
32デフォルトの名無しさんsage2005/11/24(木) 18:38:07
>>31
それは構文解析器って奴の仕事だね。yaccとかbisonとか。
正規表現はその前の字句解析に使うね。lexとかflexとか。
字句解析で正規表現をどう使うかはググってもらったほうがわかりやすい解説があると思う。
3332sage2005/11/24(木) 18:40:12
あ、yaccとかbisonとかって言うのは構文解析を行うものじゃなくて構文解析器を生成するためのツールね。
で、lexとかflexは字句解析器を生成するためのツール。
3429sage2005/11/24(木) 19:26:30
>>32,>>33 感謝。
lex/yacc自体の存在は知ってるんですが、自分のプログラム(C#)にどう生かすか、わかってません(´・ω・`)
いろいろ見てみます。

35デフォルトの名無しさんsage2005/11/25(金) 01:45:19
yaccの作者って、今ははなまるマーケットにレギュラー出演してるんだっけ
36デフォルトの名無しさんsage2005/11/25(金) 02:03:33
>>35
岡江さんが作者だったのかー
37デフォルトの名無しさんsage2005/11/25(金) 04:16:58
やっくんすげー
38デフォルトの名無しさんsage2005/11/25(金) 11:12:39
ここで
Yet Another Compiler Compiler
という全員が知っているようなマジレスをして
叩かれるのを待ってみるw
39デフォルトの名無しさんsage2005/11/25(金) 11:42:51
ここで
ヤクの亜流だからバイソンという洒落で名前がついたと言う
嘘かホントか判らん事を書いて叩かれるのを待ってみる♪
40デフォルトの名無しさんsage2005/11/25(金) 11:44:22
>>36
マジレスすると、キャイーンの天野っち。
41デフォルトの名無しさんsage2005/11/25(金) 11:47:44
>>39
ttp://www.cjn.or.jp/docs/dic/unix-term-dic.html

と、信憑性が微妙なリソースへのポインタを示して
叩かれるのをry
42酩酊 ◆TWARamEjuA sage2005/11/25(金) 20:35:34 ?###
正規表現は、やはりMかもしれない。
43デフォルトの名無しさんsage2005/11/25(金) 22:44:37 ?###
>>42
44デフォルトの名無しさんsage2005/11/27(日) 13:24:38
正規表現の$‾って具体的にはどんなデータが入ってるの?
$&はパターンマッチした文字列が入っているので直感的にわかりやすいんだけど
45デフォルトの名無しさんsage2005/11/27(日) 14:21:47
>>44
適当な例で実行して結果を表示するとか試せばすぐわかるじゃん。

それと、一応、$‾みたいなあまり普遍的でないものに言及するなら、
数ある正規表現の中のどの実装(仕様)のことなのか明記してくれ。
46デフォルトの名無しさん2005/12/11(日) 08:14:23
Windowsで正規表現にマッチする文字列のみ(行全体じゃなく)を表示・保存するにはどうすればいいのでしょうか?
xyzzyとかのエディタのgrepでやろうとしたのですが、検索してもよくわかりません。
Rubyとかスクリプト言語を使わないと無理でしょうか?
47デフォルトの名無しさんsage2005/12/11(日) 08:55:10
秀丸でさえできるし、yzzyでできないわけがない。
48デフォルトの名無しさんsage2005/12/11(日) 08:55:38
xyzzyでできないわけがない。
49デフォルトの名無しさん2005/12/11(日) 11:03:46
どうやるの?
50デフォルトの名無しさんsage2005/12/11(日) 11:18:28
おまえ一々うんこの仕方考えながらするのか?
51デフォルトの名無しさん2005/12/11(日) 11:31:43
普通にgrepすると余計なのまで出ちゃう。マッチする文字列だけでいいの。
52デフォルトの名無しさんsage2005/12/11(日) 15:35:10
http://www.vector.co.jp/soft/win95/util/se015016.html
53デフォルトの名無しさんsage2005/12/13(火) 11:26:57
>>46
検索結果を置換すればよろしかろ。
54デフォルトの名無しさん2005/12/15(木) 18:36:48
半角スペースと全角スペースのみで構成されてるデータを
さがす正規表現って、下記でよいでしょうか。
^(¥s| )*$

既出でしたらすいません。
55デフォルトの名無しさんsage2005/12/15(木) 19:02:13
¥sはタブも含むし半角と全角スペースが混じっている行にはマッチしないよ
56酩酊 ◆TWARamEjuA sage2005/12/15(木) 19:41:28 ?###
*だと^$にもマッチする悪寒♪@空文字列
5754sage2005/12/15(木) 22:25:58
^[¥s ]*$
  ↑全角スペース 
ですかね?

とある入力項目のなかで、
¥s と全角スペースで構成された、いわゆる”空行”を
はじきたいのです。
58酩酊 ◆TWARamEjuA sage2005/12/15(木) 23:40:52 ?###
だからそれだと
^$ → 空行
にもマッチするので、
^(¥s| )+$
なのではないかと。。。
59デフォルトの名無しさん2005/12/16(金) 11:52:47
>>58
有難うございます。
入力フォームで、ようするに何も入力しない場合や、
スペースのみの場合を弾きたかったので、
^$ → 空行 でマッチしてもOKでした。
^[¥s ]*$ ならば、未入力のケースと
スペースのみの場合、両方マッチできました。
60デフォルトの名無しさん2005/12/19(月) 13:56:19
************************
xxxxx
************************

こんな文字列があったとして
<>で囲まれている部分のみをマッチングするのは
<.+?>
ですが、その逆の囲まれていない部分のみをマッチングするには
どうしたらいいでしょうか。
61デフォルトの名無しさんsage2005/12/19(月) 14:25:34
>>60
これじゃいかんの?
‾$ perl -e '$var="xxxxx<¥/tag>"; $var=‾s/<.+?>//g); print "$var¥n";'
xxxxx
62602005/12/19(月) 14:32:26
マッチングさせるだけでなくreplaceが必要なのです。
6360sage2005/12/19(月) 14:36:17
連投すみません
************************
xxxxx
************************
の<>で囲まれた部分は維持したまま
囲まれていない部分をreplaceする必要があるのです。
64デフォルトの名無しさんsage2005/12/19(月) 14:37:24
それじゃ
sed -e 's/[^<]*置き換えたいもの -e 's/[^<]*/置き換えたいもの/'
みたいな感じでは?
65デフォルトの名無しさんsage2005/12/19(月) 14:50:09
情報小出しの典型的な教えてクン
6660sage2005/12/19(月) 14:50:54
ありがとうございます。
しかし、たとえば
************************
xxxxxx_xxx
************************
の<>で囲まれていない"xxx" を"yyy"にreplaceしようとすると
************************
yyyxxx_yyy
************************
となってしまいます。
67デフォルトの名無しさんsage2005/12/19(月) 15:19:59
正規表現の勉強をしようと思って、初めてこのスレを見たけど、
自分が買った本に、”0〜255”の正規表現が載っていたYO。

[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]
68デフォルトの名無しさん2005/12/19(月) 16:02:14
>>60
一般的に「ほげほげでない」条件の正規表現はめんどくさいのだが、今回の場合は
文字列の先頭または「>」 と 「<」または文字列の最後 にはさまれた部分と
考えれば簡単だ。
69デフォルトの名無しさんsage2005/12/19(月) 16:50:26
Perlメモにそのものずばりがあったよ。
http://www.din.or.jp/%7Eohzaki/regex.htm#ReplaceOutside
O崎さんすら3度も書き換えてる!むずいんだ。
‾$ perl -e '$var="xxxxx<¥/tag>xxxxx<¥/tag>xx"; $var =‾ s/(?:^|(?<=>))(.*?)(?:$|(?=<))/yyy/g; print $var, "¥n";'
yyyyyyyyyyyyyyy
70デフォルトの名無しさんsage2005/12/19(月) 16:56:17
いけね、古いほう張っちゃった。これだとタグから始まる場合、まずい。
だけど
2002/10/21 「タグの外側だけ対象に置換する」スクリプトと文章追加
の最後に書いてある解決法、理解できん。
71デフォルトの名無しさんsage2005/12/19(月) 23:10:18
>>69 正規表現 マッチしない でぐぐったらそんなの簡単に見つかるわけだし
まさかぐぐりもしないで質問したんだろうか?
72デフォルトの名無しさんsage2005/12/20(火) 01:18:47
>>71
検索がお上手ですね  











、とでもいってほしいのか?
73デフォルトの名無しさんsage2005/12/20(火) 09:52:15
下手といわれるよりはマシだろ
7460sage2005/12/20(火) 10:08:26
>>69
ありがとうございます。
PHPで ¥G が使えないのでそのへんのロジックは
自分で書くしかないかなと思ってます。
75デフォルトの名無しさんsage2005/12/20(火) 10:17:03
質問小出し作戦
7660sage2005/12/20(火) 12:12:14
おかげで解決できました。
以下のようにしました。
$str = 'xxx1xxx3xxx5_xxx6xxx7';
$search = 'xxx';
$replace = 'yyy';

$search = '([^<]*)'.$search;
$replace = '$1'.$replace;

$str = preg_replace ('/'.$search.'/',$replace,$str);

while ( preg_match('/>'.$search.'/',$str) )
{
$str = preg_replace ('/>'.$search.'/','>'.$replace,$str);
}

echo $str;

/* output

yyy1yyy3yyy5_yyy6yyy7

*/
?>
77デフォルトの名無しさんsage2005/12/20(火) 13:50:52
正規表現で閉じなくてコードを書いてもいい普通のプログラミングの話
だったなら、最初からスクリプトのスレに行けばいいじゃんかよ...
78デフォルトの名無しさんsage2005/12/20(火) 22:54:11
だから情報を小出しにするやつの相手しちゃダメなんだって
79デフォルトの名無しさんsage2005/12/21(水) 02:31:14
コードを書いてもいい、んじゃなくて
正規表現だけじゃ解決できなかったっていう話しですよ。
内容ちゃんと理解してからレスしてね。
粘着質な自治厨さん。
8077sage2005/12/21(水) 03:41:09
「行けばいいじゃんか」って書き方が気に障ったのならスマンな。
「行ったら楽だったのでは」と読み替えてくれ。

ある問題につきあたったとき、それをなぜ正規表現の範囲で解決しなければ
ならないと考える人が多いのか、不思議なんだよ。悪い意味のコダワリなのでは。

実際、最初に問題が提示されてから解決まで丸1日もかかっていますよ。


それから「閉じている」というのは普及した技術用語で、ある技術や問題が特定の
範囲に囲い込まれている or 「〜だけで解決や表現できる」ことを意味します。
81デフォルトの名無しさんsage2005/12/21(水) 05:06:06
>>80
ここが正規表現スレだからだろ

ご飯の炊き方スレでパンの焼き方解説してどうするんだよ
82デフォルトの名無しさんsage2005/12/21(水) 09:39:00
>>80
スレタイ50000回声に出して嫁
83デフォルトの名無しさんsage2005/12/21(水) 09:57:11
どのていどの妥当性をもって良しとするか前提がない
正規表現を記述しようと試みるのは愚の骨頂といえよう
84デフォルトの名無しさんsage2005/12/21(水) 10:04:29
初心者のうちは文字列処理=正規表現だからしょうがないとも言える
85デフォルトの名無しさんsage2005/12/21(水) 10:05:44
>>83
そういう戯言は他のスレで言って来い
86デフォルトの名無しさんsage2005/12/21(水) 12:11:41
ということで>>85が正規表現の範囲で解決してくれるそうです。
87デフォルトの名無しさん2005/12/24(土) 04:34:20
「2aa」や「5aaaaa」といった文字列,つまり最初に数字があってそのあとにその数字の数だけ「a」が続くという文字列を正規表現であらわすにはどうすればよいでしょうか。(¥d+)a{¥1}という記述では拾えませんでした。。
88デフォルトの名無しさんsage2005/12/24(土) 07:55:09
>>87
無理。
'2'を数の2にevaluateする仕組みが必ずどこかに必要。
桁数が有限なら自明な和(正規表現の|)で実現できるけど、実用にはならない。

89デフォルトの名無しさんsage2005/12/24(土) 11:11:26
>>87-88
まぁその evaluate する仕組みなわけだが、Perl なら

print "$_ : ", /^(¥d+)(??{"a{$1}"})¥z/ ? 'match' : 'unmatch', ".¥n"
  for '2aa', '5aaaaa', '7aaa', '11aaaaaaaaaaa', 'aaaaa';
90872005/12/24(土) 18:59:20
>>88-89
レスありがとうございます。
が,(??{"a{$1}"})のところがよくわかりませんでした。。
http://www.kt.rim.or.jp/‾kbk/perl5.005/perlre.html
に少し解説してある拡張構文の(?{ code })を使われてると推測したのですが,
「??」と2個続くとどういう意味になるのでしょう?
91デフォルトの名無しさんsage2005/12/24(土) 19:17:47
>>90
http://www.kt.rim.or.jp/‾kbk/regex/regex.html#QUESTIONMIN
92デフォルトの名無しさんsage2005/12/24(土) 23:12:48
>>91
違う。

>>90
http://www.kt.rim.or.jp/‾kbk/perl-5.8/perlreref.html#_g_______extended_constructs_
9391sage2005/12/24(土) 23:20:14
>>92
ゴメソよく見てなかった…
94デフォルトの名無しさんsage2006/01/04(水) 16:38:50
¥1 に渡す方法について教えて下さい

A) 作者名
B) 作者名

AとBの2パターンがあったとして、どちらにもマッチする方法で「作者名」だけを ¥1 に渡すにはどうしたらよいでしょうか?
^.*>(.*)<.*$ や ^[.*>|.*](.*)[.*<|.*]$ などとしているのですが、どうにも絞り込めません。
95デフォルトの名無しさんsage2006/01/04(水) 17:58:40
>>94
言語は?
96デフォルトの名無しさんsage2006/01/04(水) 19:24:17
>>95
とりあえず純粋正規表現(?)のみじゃね?
言語のパワーを借りないと無理っぽいけど

つーか、この仕様の書き方だと
C) http://xxxx">作者名
のときは 『http://xxxx">作者名』 が
作者名になるな。うん。
97デフォルトの名無しさんsage2006/01/04(水) 21:36:20
つーかHTMLパーサのスレってなかったっけ?
XMLのスレには含めたくないみたい。
98デフォルトの名無しさんsage2006/01/06(金) 22:29:59
// C#
string text = "作者名¥r¥n作者名";
Regex re = new Regex("(^.*>(?.+)<.*$)|(^(?.+)$)", RegexOptions.MultiLine);
foreach(Match m in re.Matches(text)){
    Console.WriteLine(m.Groups["name"].Value);
}
99デフォルトの名無しさんsage2006/01/19(木) 18:08:30
#Perl 5.8
$_ = 'jvmv log:99jikvdglog:100bmvkllog:200';
s/.*log:(¥d+).*/$1/;
print $_;

これだと最長一致してしまうので、200が表示されます。
s/.*log:(¥d+)?.*/$1/; としてみましたがだめでした。
最初の 99 を取るにはどうしたら良いのでしょうか?
100デフォルトの名無しさんsage2006/01/19(木) 18:42:01
s/.*log:(¥d+)¥D*/$1/
101デフォルトの名無しさんsage2006/01/19(木) 18:57:20
s/.*?log:(¥d+).*/$1/;
10299sage2006/01/19(木) 19:15:12
>>101
なるほど!!
なんで気が付かなかったかな、・・・
103デフォルトの名無しさんage2006/01/26(木) 12:19:36
秀丸の正規表現を使って
先頭に#のついたコメント行と空白行以外を
正規表現でgrepしてマッチさせたいのですが

除外したいものだけの検索は
^[ |¥t]*[#|¥n]
で出来たのですが、それを否定した行を
マッチさせるにはどうしたらいいでしょうか?
104デフォルトの名無しさんsage2006/01/26(木) 12:51:52
>>103
grep -v
105デフォルトの名無しさんsage2006/01/26(木) 13:45:25
>>103
> 除外したいものだけの検索
HmJre.dll の機能では恐らく無理。

秀丸エディタスレ Part13
http://pc7.2ch.net/test/read.cgi/software//
106デフォルトの名無しさんsage2006/01/26(木) 13:46:46
一般にある正規表現にマッチしない文字列にマッチする正規表現を
求めるのは難しい。たいてい正規表現にマッチするものに対して
なんかする機能とマッチしないものに対してなんかやる機能は対に
なってるものだが秀丸にはないんですかね?

たとえばgrepだと-vフラグでマッチしない行の表示になるし、viだと
g//〜とv//〜があるわけですが。
107デフォルトの名無しさんage2006/01/26(木) 14:03:13
秀ちゃんではムリですか
メンドーだけど
^[ |¥t]*[a-zA-Z0-9記号羅列・・・・(#以外)]
でやってしまいます。
108デフォルトの名無しさん2006/01/26(木) 15:52:32
正規表現は規格統一されてないのですか?
109デフォルトの名無しさんsage2006/01/26(木) 15:53:05
うん。
110デフォルトの名無しさん2006/01/26(木) 16:30:09
イケない事だと思いませんか?
111デフォルトの名無しさんsage2006/01/26(木) 16:46:32
ううん。
112デフォルトの名無しさんsage2006/01/26(木) 16:50:03
イけてないことだとは思います。
113デフォルトの名無しさんsage2006/01/26(木) 21:21:53
性器が個人差あるようなもんさ
114デフォルトの名無しさんsage2006/01/27(金) 01:00:42
ゼロの者での表現はあんまり好きじゃない
115デフォルトの名無しさんsage2006/01/27(金) 01:48:29
昔は好きだったんだけどな。
116デフォルトの名無しさん2006/01/27(金) 10:07:21
正規なのに亜種だらけとはこれ如何に?
117デフォルトの名無しさんsage2006/01/27(金) 20:47:11
規格と言えるほどのものというと
・POSIX
・XML Schema
ぐらいかねえ。あとはプログラミング言語やツール依存。

118デフォルトの名無しさんsage2006/01/27(金) 21:26:25
ECMAScriptの仕様書に、正規表現の部があったような。
119デフォルトの名無しさんsage2006/01/27(金) 21:28:50
「規格」はあれど、「規格統一」は無し・・・
120デフォルトの名無しさんsage2006/01/27(金) 23:54:55
POSIXが不遇なのはPerl互換のせいだな。
デフォで最長一致にならんのが普通って状況。
121デフォルトの名無しさんsage2006/01/28(土) 01:04:08
宗教か
122デフォルトの名無しさんsage2006/01/29(日) 00:11:40
オレはつつみあかり教だな
123デフォルトの名無しさんsage2006/01/29(日) 21:39:19
文頭・文末に任意に存在する/を取りたいのですが、
文末の/が.*に吸収されてしまいます。
これを改善する方法は無いでしょうか?

値の例:(aaは任意の値で、/を含むことがある)
aa
/aa
aa/
/aa/

作ってみた表現:(PHP)
preg_replace("/^¥/?(.*)¥/?$/", "¥¥1", $str);

結果:
/aa -> aa
/aa/ -> aa/
124123sage2006/01/29(日) 21:52:12
続報です。

preg_replace("/^¥/?(.*?)¥/?$/", "¥¥1", $str);

で、何故か大丈夫でした。
理屈が分かりませんが・・・
125デフォルトの名無しさんsage2006/01/29(日) 22:43:36
ecmascriptなら
str.replace(/^¥/|¥/$/g, "")

str.replace(/^¥/?(.*?)¥/?$/, "$1")
でうまくいった。
126デフォルトの名無しさんsage2006/01/29(日) 23:17:46
解が複数ある場合、どれが選ばれるかという決まりは特にない。
ましてPerl互換のエンジンの場合は全ての解を求めない。
127デフォルトの名無しさんsage2006/01/29(日) 23:29:54
で?
128デフォルトの名無しさんsage2006/01/31(火) 12:34:39
/((それ)?で|だから(なに)?)¥?/
とか言うやつは卑怯者
129デフォルトの名無しさんsage2006/01/31(火) 17:32:48
>>128
それで?
だからなに?
130デフォルトの名無しさんsage2006/01/31(火) 20:20:48
D:¥>type sorededakaranani.js
while (! WScript.StdIn.AtEndOfStream) {
  if (/((それ)?で|だから(なに)?)¥?/.test(WScript.StdIn.ReadLine()))
    WScript.StdOut.WriteLine("卑怯者");
  else
    WScript.StdOut.WriteLine("not 卑怯者");
}

D:¥>cscript //nologo sorededakaranani.js
で?
not 卑怯者
それで?
not 卑怯者
だからなに?
not 卑怯者
^Z

D:¥>
131デフォルトの名無しさんsage2006/01/31(火) 21:38:22
>>130
?が全角になってるから。
つまりもっと卑怯者
132デフォルトの名無しさんsage2006/01/31(火) 23:16:47
後出しジャンケンとかマジかっけーし
133デフォルトの名無しさんsage2006/01/31(火) 23:32:44
後出しじゃんけんで負けてる>>128
134デフォルトの名無しさんsage2006/02/01(水) 09:49:54
喧嘩してーなら河原行ってこい
135デフォルトの名無しさんsage2006/02/01(水) 21:21:21
¥Aから始まって"で終わる文字列にマッチするにはどうしたらいいのでしょうか?
"/¥¥A[^¥"]*¥"/i"
にしてもマッチしませんですた
PHPでつ
136デフォルトの名無しさんsage2006/02/01(水) 21:39:21
試してないけどエスケープが足りないんじゃないかな。 PCRE だよね?
"/¥¥¥¥A[^¥"]*¥"/i"
137デフォルトの名無しさんsage2006/02/01(水) 23:55:12
ありゃ、知りませんですた。
基本のようですね、丁寧にありがとうございますた(;´Д`)
138デフォルトの名無しさんsage2006/02/02(木) 09:44:43
必要ないなら ' にしとくとまだマシ
preg_ を " で書くと気が狂いそうになる
139デフォルトの名無しさんsage2006/02/02(木) 14:09:07
Emacs Lisp の正規表現よりマシ。
140デフォルトの名無しさんsage2006/02/02(木) 16:11:04
発言者「発言」

みたいなデータがあるとき、Rubyの正規表現で
発言者と発言を取り出すにはどうやればいいんでしょうか?
(.+)「(.+)」$でやってみたのですが、無理だったので。
141デフォルトの名無しさんsage2006/02/02(木) 16:19:53
>>140
それでいけるはず。
ただ、文字コードが合ってないとまずいかも。
例えばマッチ対象文字列が EUC-JP なら /(.+)「(.+)」$/e みたいにする。
あるいは、 $KCODE = 'e' するとか、コマンドラインオプションで -Ke するとか。
142デフォルトの名無しさんsage2006/02/02(木) 16:45:27
>>141
文字コード、確かにEUCです。
早速やってみます。有難うございます。
143デフォルトの名無しさん2006/02/02(木) 17:24:11
h抜きURLの場合には先頭にhをつけてリンクするにはどうすればよいのでしょうか?
通常のhttp〜もリンクできるとなおいいです。
144デフォルトの名無しさんsage2006/02/02(木) 17:41:39
h?ttp:// ほげほげな正規表現を使えばよいのでは
145デフォルトの名無しさん2006/02/04(土) 17:11:10
行頭のない行って存在しますか?
146デフォルトの名無しさんsage2006/02/04(土) 17:46:32
>>145
/^/はあらゆる行にマッチすると思います。
147デフォルトの名無しさんsage2006/02/04(土) 18:54:23
>>145
禅問答か何か?
148デフォルトの名無しさんsage2006/02/04(土) 21:21:57
行頭だけの行って考え方もあるのか
149デフォルトの名無しさんsage2006/02/04(土) 22:52:51
        て          
     存    っ        
  在         行      
                   
 し            い    
                   
 ま            な    
                   
   す         の     
     か  行  頭       

150デフォルトの名無しさんsage2006/02/04(土) 23:06:20
行頭が存在するためには何が必要なんだ?
151デフォルトの名無しさんsage2006/02/04(土) 23:16:29
行だ
152デフォルトの名無しさんsage2006/02/04(土) 23:19:04
諸君、行は行頭を必ず持つといえるだろうか?
153デフォルトの名無しさんsage2006/02/04(土) 23:21:45
行を「テキストエディタでカーソルが移動できる範囲」と定義すればありうるかも知れない。
154デフォルトの名無しさん2006/02/04(土) 23:24:08
エーテルが必要だな
155デフォルトの名無しさんsage2006/02/04(土) 23:55:31
光の速さになると行頭は存在しません。
156デフォルトの名無しさんsage2006/02/04(土) 23:59:38
絶対零速度に於いて行頭は2つ存在します。
157デフォルトの名無しさんsage2006/02/05(日) 00:02:37
行頭はサイコロを振らないと思う
158・∀・)っ-○●◎- ◆Pu/ODYSSEY sage2006/02/05(日) 00:11:47
行頭となるも午後となるなかれ。
159デフォルトの名無しさんsage2006/02/05(日) 00:15:20
不確定性原理により、行頭を見つけようとすればするほど、その位置はわからなくなる。
160酩酊 ◆TWARamEjuA sage2006/02/05(日) 00:17:05
行頭は1日にして成らず
161デフォルトの名無しさんsage2006/02/05(日) 00:27:28
>>155
静止した観測者からそう見えるだけだな。
相対性の問題だ。
162デフォルトの名無しさんsage2006/02/05(日) 00:47:38
なんだこの行頭スレは。 ゲシュタルト行頭崩壊でも起こしたのか?
163デフォルトの名無しさんsage2006/02/05(日) 01:12:39

    |         ……
    |  ('A`)
   / ̄ノ( ヘヘ ̄ ̄

       ↑
      行末
164デフォルトの名無しさんsage2006/02/05(日) 08:17:12
>>145
やったな、おい!大漁じゃねーか!
165デフォルトの名無しさんsage2006/02/05(日) 12:01:19
行頭があれば行末もあるはずだよな
166デフォルトの名無しさんsage2006/02/05(日) 12:43:38
と、思うでしょ
167デフォルトの名無しさん2006/02/05(日) 15:14:31
同じ行に 「男」か「女」が順不同で含まれている行を検索するにはどう書けばいいの?
たとえばこんなのを全部検索したい
「男と女の〜」
「その女が男の〜〜」
168・∀・)っ-○●◎- ◆Pu/ODYSSEY sage2006/02/05(日) 15:25:16
男.*女|女.*男
169デフォルトの名無しさんsage2006/02/05(日) 17:19:26
これなら行頭があって行末
                の
                 無
                  い
        と 思 う の  文
       う         だ
      ろ          が
     だ           、
       う       実
         ど は 際
170・∀・)っ-○●◎- ◆Pu/ODYSSEY sage2006/02/05(日) 17:36:45
神業的なリンケージリストの検出プログラム思い出した
171・∀・)っ-○●◎- ◆Pu/ODYSSEY sage2006/02/05(日) 17:36:59
ループ検出
172デフォルトの名無しさんsage2006/02/05(日) 17:42:43
>>171
1個進むのと2個進むやつ?
173・∀・)っ-○●◎- ◆Pu/ODYSSEY sage2006/02/05(日) 18:10:41
それなんてアスキー出版局?
たしかそれ。
174デフォルトの名無しさんsage2006/02/05(日) 19:10:19
>>170
どういうの?
後学のために教えてプリーズ
175デフォルトの名無しさんsage2006/02/05(日) 19:15:49
>>174
単方向リストで、片一方を一度に1個、
もう片一方を一度に2個進めて、
2個進めたほうがNULLにあたればループしていない。
逆に1個進めたほうと2個進めたほうが途中で同じ値になればループしているとか、
そんな感じだったと記憶している。

int isLoop(List*a){
    List*b=a;
    if(b)
        while((b=b->next) != NULL && (b=b->next) != NULL && a!=b && (a=a->next)!=b){}
    return b != NULL;
}
176デフォルトの名無しさん2006/02/07(火) 22:10:12
あんまりわかっていない者です。Javaでやっております。
かなり複雑な仕様で、ある文字列に次の文字がある場合に、
その文字を接頭語とする単語として区切ってStringの配列で返したいです。
# X ¥ ¥+ ¥- + -

#123¥+123 とあれば、#123と¥+123の2単語に分けます。
また、文字列に半角スペースがあれば、
そのまま連続する半角スペースを文字列として返します。

もうあと少しなのですが、うまくいきません。

"TOP¥+123+123 ¥-123-123¥" という文字列がある場合に、
以下のようになってしまいます。

"TOP"
"¥"
"+123"
"+123"
" "
"¥-123"
"-123"
"¥"
177デフォルトの名無しさん2006/02/07(火) 22:11:45
本来であれば、以下なのですか。(¥+がうまくいかないです。)

"TOP"
"¥+123"
"+123"
" "
"¥-123"
"-123"
"¥"

どこを変えればよいのでしょうか?6時間やってますがダメです…
178デフォルトの名無しさん2006/02/07(火) 22:13:12
プログラム添付します。
String source = "TOP¥¥+123+123¥¥-123-123";
ArrayList list = new ArrayList();
Pattern p = Pattern.compile("(¥¥G[^X#¥¥+¥¥-¥¥¥¥ ]+)|(¥¥G¥¥¥¥-[^X#¥¥+¥¥-¥¥¥¥ ]*)|(¥¥G¥¥¥¥+[^X#¥¥+¥¥-¥¥¥¥ ]*)|(¥¥GX[^X#¥¥+¥¥-¥¥¥¥ ]*)|(¥¥G#[^X#¥¥+¥¥-¥¥¥¥ ]*)|(¥¥G¥¥+[^X#¥¥+¥¥-¥¥¥¥ ]*)|(¥¥G¥¥-[^X#¥¥+¥¥-¥¥¥¥ ]*)|(¥¥G¥¥¥¥[^X#¥¥+¥¥-¥¥¥¥ ]*)|¥¥G +");
Matcher m = p.matcher(source);
while (m.find()) {
String s = m.group(0);
int lastIndex = list.size() - 1;
if (s.equals(" ") && lastIndex >= 0 && !list.get(lastIndex).equals(" ")) {
list.set(lastIndex, list.get(lastIndex) + s);
} else {
list.add(s);
}
System.out.println("¥"" + s + "¥"");
}
179デフォルトの名無しさんsage2006/02/07(火) 22:59:14
Java使ったことないし、正規表現を知ったのが昨日という俺が適当に答える
import java.util.*;
import java.util.regex.*;
class a{
    static public void main(String[]args){
        ArrayList list = new ArrayList();
        Pattern p = Pattern.compile("¥¥ +|(¥¥¥¥[¥¥+¥¥-]?|[+#X-])[^¥¥¥¥ +#X-]*|[^¥¥¥¥ +#X-]+");
        Matcher m = p.matcher("TOP¥¥+123+123 ¥¥-123-123¥¥");
        while(m.find())list.add(m.group());
        for(String s:list)
            java.lang.System.out.println("¥""+s+"¥"");
    }
}
180179sage2006/02/07(火) 23:10:36
実は>>176が空白の扱いをどうしたいのか、
イマイチ分からんから適当に書いてるんで意図と違うなら指摘よろ
181デフォルトの名無しさんsage2006/02/08(水) 00:32:26
>>176
Java はまったくわかりませんが、
>¥+がうまくいかないです。
の参考になるかもしれないので、名前だけ Java に似てる JavaScript で書いてみました。

javascript:alert('¥"'+'TOP¥¥+123+123 ¥¥-123-123¥¥'.match(/((^| +|#|X|¥¥?¥+|¥¥?-|¥¥)[^¥3]*?)(?= |#|X|¥¥?¥+|¥¥?-|¥¥|$)/g).join('¥"¥n¥"')+'¥"¥n');

ブラウザのアドレスバーに入れると確認できます。
1821762006/02/08(水) 09:42:59
>>179 >>180
できました!すばらしいです。空白の扱いもあっています。連続した空白を1つの単語とします。
あと、ちょっと言いにくいんですが、それに加えて、
'abc' のようにシングルクォーテーションで区切られる文字も1つの単語としたいんですが…
但し、!'とあった場合は、'を文字列とします。!はエスケープです。
因みに、私もおととい正規表現を知ったばかりです。。。

>>181
これもできました。JavaScriptでもできるんですね。参考になりました。
183179sage2006/02/08(水) 10:59:21
えー仕様の追加かよorz

'ABC'が一つの単語になるのは分かった。
しかし、 !' の扱いが分からん。
!'は'XXX'の内部で発生するのか、それとも外部でも発生するのか?

つまり
ABC 'DEF' !' e
みたいに単独で!'が出る可能性があるのかどうか?
それとも
ABC  'ff!'df'のようにシングルクウォーテーションの内部で出るのか?

どっちかによって答えが変わるから。

それと、この次に仕様の追加があったらもう答えないからな。
184179sage2006/02/08(水) 11:11:47
もう面倒だから、エスケープの内部でしか発生しないとヤマを張ってあらかじめ張っておく。
違っていた場合はもう知らね。

自分の前に書いたコードから正規表現の部分だけ変えてくれ。

"'(!'|[^'])*'|¥¥ +|(¥¥¥¥[¥¥+¥¥-]?|[+#X-])[^'¥¥¥¥ +#X-]*|[^'¥¥¥¥ +#X-]+"

文字列のマッチしかしないんで!'の置換は適当にString.replaceでも呼んでやっといてくれ。
185デフォルトの名無しさんsage2006/02/08(水) 11:21:35
>>184
>違っていた場合はもう知らね。

え〜、そんなこと言わないでくださいよぉ〜














なんて言って欲しそうな臭いがプンプンするな。その文章・・・
186デフォルトの名無しさんsage2006/02/08(水) 11:27:17
>>185
いや、単純に飽きた。

Javaが初めてだから、ドキュメント読みながら入門サイトで調べてるし、
正規表現もさっぱりだから調べたりしてる。

が、なんで他人の正規表現のために、
使ったこともないし使う予定も無い言語を勉強しなきゃならんねん気分で根気的に限界
1871762006/02/08(水) 13:10:16
>>179
マジ有難う… 動いたっス。もう仕様追加しないっす。
正直うれしいです。

#実はもうちょっとだけありますが、後はこっちでやります。
188デフォルトの名無しさん2006/02/08(水) 13:33:14
道場スレ落ちてるな
1891762006/02/08(水) 16:04:38
ほんとに最後…
''の中に日本語・記号等全ての半角・全角文字を使えるようにするには
どうしたら良いでしょうか?3時間やりましたがダメでした…
¥p{}でゴリゴリやるんでしょうか?
190デフォルトの名無しさんsage2006/02/08(水) 16:23:16
>>189
空気嫁
親切にしてくれた人のこと考えろや・・・
191デフォルトの名無しさんsage2006/02/09(木) 00:35:18
そういう面倒な感じなのは正規表現使わずに
地道にゴリゴリやりたくなる。
192デフォルトの名無しさんsage2006/02/09(木) 01:10:14
おれはそういうのは正規表現だけで何とかならないか
タバコ吸いながらボーっと考えるのが好きだな
それで簡潔で美しいのが思いついたら
オレ脳内でオレが神になるその瞬間が好き
193デフォルトの名無しさんsage2006/02/09(木) 10:00:20
正規表現だからって一気にやる必要ないと思うんだけどね
194デフォルトの名無しさん2006/02/09(木) 15:52:13
Perlで正規表現使ってとあるファイルをいじってるんですが
read(FILE,$buffer,6)
$buffer =‾s/([¥xA1A1-¥xFEFE]|¥x8E[¥xA1-¥xDF])¥xA3¥x0C|¥x1B([¥xA1A1-¥xFEFE]|¥x8E[¥xA1-¥xDF])/$1¥n$2/g;
(一部分のみ)

の場合”不気味”にひっかかったり”ィ”にひっかかったりします
・・・
何かいい表現はないかなと思って詮索してみましたが分からないのでお力借りたいですorz

文字コードはEUCで1バイト文字も混在してます
195デフォルトの名無しさんsage2006/02/09(木) 16:03:50
>>194
http://www.din.or.jp/‾ohzaki/perl.htm#JP_Match
196デフォルトの名無しさんsage2006/02/09(木) 16:27:31
>>195
レスどもです
熟読してきます
197デフォルトの名無しさんsage2006/02/09(木) 20:06:58
>>176
参考にはならないと思いますが書いてみました。(←すこしニュアンスを変えました)

javascript:alert('¥"'+'TOP¥¥+123+123Xab!¥'c ¥¥-123¥'d#e!¥'f¥¥+g-hXi¥'-123¥¥'.match(/'(!'|.)*?('|$)|(!'| +|#|X|¥¥?¥+|¥¥?-|¥¥|.)(!'|.)*?(?='| |#|X|¥¥?¥+|¥¥?-|¥¥|$)/g).join('¥"¥n¥"')+'¥"¥n¥n'+RegExp.input);

>>187
>#実はもうちょっとだけありますが、後はこっちでやります。
禁句です。あるなら質問する。そうでなければ黙っとくことをお勧めします。
198デフォルトの名無しさんsage2006/02/09(木) 20:19:23
あ、しまった。もう見てないのね orz
199デフォルトの名無しさんsage2006/02/09(木) 21:49:18
Visual Studioのテキストエディタの検索・置換で使う正規表現は
独特なので戸惑う。
¥w とか .* とかは使えないし。
せめて.NetのSystem.Text.RegularExpressionsの正規表現が通るように
なればなあと。
200いいともの客sage2006/02/09(木) 23:36:00
そうですねー。
201デフォルトの名無しさんsage2006/02/09(木) 23:43:26
`ー' は要らないと思った。
202デフォルトの名無しさんsage2006/02/10(金) 01:00:24
>>199
それ、VS 2005 でも改善されてないんだっけ?
203・∀・)っ-○●◎- ◆Pu/ODYSSEY sage2006/02/10(金) 01:10:38
たしかATLの正規表現と同じような文法だったような(そのもの?)
204デフォルトの名無しさんsage2006/02/10(金) 01:17:13
>>202
改善する気がないようです
205デフォルトの名無しさんsage2006/02/10(金) 23:29:28
>>199の .* は .*? に訂正
206デフォルトの名無しさんsage2006/02/13(月) 09:35:15
ちょっと具体的なサンプルが少ないようで残念

正規表現ポケットリファレンス
http://www.gihyo.co.jp/books/syoseki-contents.php/4-7741-2671-3
207デフォルトの名無しさんsage2006/02/15(水) 13:09:10
詳説正規表現の第2版買いました。高くて泣きそうです。
んでp.25の時刻の正規表現のやつで

  (1[012]|[1-9]):[0-5][0-9] (am|pm)

とあったので試しましたが

$ echo "1:23 am" | egrep '(1[012]|[1-9]):[0-5][0-9] (am|pm)'
 1:23 am
$ echo "11:23 am" | egrep '(1[012]|[1-9]):[0-5][0-9] (am|pm)'
 11:23 am
$ echo "31:23 am" | egrep '(1[012]|[1-9]):[0-5][0-9] (am|pm)'
 31:23 am
$ egrep --version
 egrep (GNU grep) 2.5.1

となって困ってます。どこ間違ってますか?
208デフォルトの名無しさんsage2006/02/15(水) 13:33:27
こうじゃない?

(1[012]|0[1-9]):[0-5][0-9] (am|pm)
     ^^
209デフォルトの名無しさんsage2006/02/15(水) 13:40:23
>>207
31:23 am のうち1以降がマッチしてるのでマッチした行が出力される
210デフォルトの名無しさんsage2006/02/15(水) 14:01:37
てか仕様くらい書け。

 "9:17 am" や "12:30 pm" のような時刻にマッチする正規表現としてたとえば
 
  [0-9]?[0-9]:[0-9][0-9] (am|pm)
 
 を考えてみた場合、一応マッチはするが "99:99 pm" といった無意味な時刻にもマッチしてしまう。
 そこで、時として取りうる1桁と2桁の部分をうまく狭めて
 
  (1[012]|[1-9])][0-5][0-9] (am|pm)
 
 とすればよい。

と、概論の章のこんな内容。第2版第1刷だが。

>>209
だな。狭め方が説明のために端折られてて足りないだけに見える。
catとvacationの例のと同じ。説明不足で惜しいと見るか序章概論上妥当と見るかは悩ましいところか。
211デフォルトの名無しさんsage2006/02/19(日) 02:38:09
つーかregexp関係で本買うなんて…
212・∀・)っ-○●◎- ◆Pu/ODYSSEY sage2006/02/19(日) 02:47:32
「詳説 正規表現」は必読書じゃねーの?
いっぺん独自実装を試みたことがある。
213デフォルトの名無しさんsage2006/02/19(日) 03:48:37
「オートマトン言語理論計算論」は必読書じゃねーの?
いっぺん独自実装を試みたことがある。
214デフォルトの名無しさんsage2006/02/19(日) 08:29:07
ただ独自実装言いたいだけちゃうかとと言いたいだけちゃうかと。
215デフォルトの名無しさんsage2006/02/19(日) 10:50:20
ちゃうちゃうちゃうんちゃう
216デフォルトの名無しさんsage2006/02/19(日) 11:53:35
『詳説 正規表現』を不要だと言い切る人には出会ったことがないんだが
邦訳の曖昧さが気になれば原書当たればいいし
217デフォルトの名無しさんsage2006/02/19(日) 12:06:15
は?
邦訳が曖昧な場合は得てして原文も曖昧。
文学作品じゃないんで。
218デフォルトの名無しさんsage2006/02/19(日) 12:39:26
そうでもない
219デフォルトの名無しさんsage2006/02/19(日) 13:08:26
>>217
あたまわるいなあ

邦訳が曖昧な場合
概念からして曖昧なのかどうかなんて
原文見ないとそもそもわからんだろ
220デフォルトの名無しさんsage2006/02/19(日) 14:03:45
>>217
訳者の理解が足りない場合が圧倒的に多いだろ
221デフォルトの名無しさんsage2006/02/19(日) 14:29:47
訳者は翻訳を生業にするほどだから英語力は並み以上。
かたやお前らは受験勉強程度の翻訳力しかない。
どうあがいても訳者と同じかそれ以下の翻訳しかできないのが常。

結局、前後の文脈から読み解くわけだが、
その文脈範囲を広く取ることでなんとか判ったような気になる。

英文読解時の前後文脈を広く取るハメになったことがなぜか訳者のせいになる。

訳者の理解が足りないニダ
222デフォルトの名無しさんsage2006/02/19(日) 14:32:50
>>218-220
要するに、
意訳・補足を入れてくれないような不親切な翻訳は認めない
ってことだろ、お前らw
223デフォルトの名無しさんsage2006/02/19(日) 14:34:43
アメリカンジョークに対する意訳・補足がない翻訳は
たしかにウンコ以下だな
224デフォルトの名無しさんsage2006/02/19(日) 14:42:43
お前らの潜在意識には、「英語には乱文が存在しない」「英語は論理的文章」という刷り込みがある。
実際には、日本語の文章に日常的に曖昧文・乱文があるのと同じように、
英語の文章にも日常的に同じものがあることを理解できない。
なぜなら、お前らは日本語文章しか良し悪しを判断する対象にできないからだ。
つまり、馬鹿ということだ。
225デフォルトの名無しさんsage2006/02/19(日) 14:43:28
不明な部分は著者に確認しながら翻訳したみたいだけど
文枝もいることだし
226デフォルトの名無しさんsage2006/02/19(日) 14:50:57
日本では、論理的にまとまった文章しか、英語の授業では取り上げない。
例えば新聞記事や著名な文学作品。

だが、お前らが実社会で接することになるのは、
文豪でもなんでもないお前らと同様、文豪でもなんでもない外国の一般人の文章だ。

偉そうに翻訳を貶める輩に限って外国人とメールのやり取りをしたことがなかったりする。
227デフォルトの名無しさんsage2006/02/19(日) 15:01:53
原典の文章構成の悪さまで翻訳者の理解不足のせいにする人が集うスレはここですか?
228デフォルトの名無しさんsage2006/02/19(日) 15:02:30
「詳説 正規表現」だけ読んで独自実装しようって無茶な気がしなくもない。
229・∀・)っ-○●◎- ◆Pu/ODYSSEY sage2006/02/19(日) 15:41:15
自動羊なら理解している
230デフォルトの名無しさんsage2006/02/19(日) 16:11:09
否定検索ってできたっけ?
231デフォルトの名無しさん2006/02/19(日) 16:38:18
!付けろ
232デフォルトの名無しさんsage2006/02/19(日) 17:43:27
専門書の翻訳の良し悪しは、英語力よりもその専門に関する知識の方が大事だよ。
233デフォルトの名無しさんsage2006/02/19(日) 18:48:59
>>232
同意
234デフォルトの名無しさんsage2006/02/19(日) 22:43:00
>>222
違うよ。翻訳は不要だってことだ。
235デフォルトの名無しさんsage2006/02/20(月) 00:36:46
独自実装には「詳説 正規表現」は不要と言い切れる。
ドラゴンブックだけ読めば実装できたから。
236デフォルトの名無しさん2006/02/20(月) 01:49:33
文字列の中で{}で囲まれた部分を抜き出したいのですが
正規表現むずかくてなかなか思い通りにいきません。
ABCDEFG{HIJ}KLMN
→{HIJ}
としたい場合どうやればよいのでしょうか?
237・∀・)っ-○●◎- ◆Pu/ODYSSEY sage2006/02/20(月) 01:55:17
¥{.*¥} とか。

{}がどう解釈されるかにもよるが。
2382362006/02/20(月) 02:36:15
>>237
すいません。質問が悪かったです。
{}は複数出てくるんです。
ABCDEFG{HIJ}KLMN{OPQ}RSTU
といった感じです。
よろしくお願いします。
239デフォルトの名無しさんsage2006/02/20(月) 02:39:14
>>238
答えの質も悪いから
ABCDEFG{H{I}J}KLMN{OPQ}RSTU
ってのもあるか聞かせてくれ。
2402362006/02/20(月) 02:46:11
>>239
無いです。
これを気に正規表現を勉強しようと色々調べて
こんな感じかと思ったのですが
¥{[^¥}]*
後ろのの}がこれじゃひっかかりません。

すいませんがよろしくお願いします。
241デフォルトの名無しさんsage2006/02/20(月) 02:52:23
>>240
Perl ならこんな感じかなあ。

my $str = "ABCDEFG{HIJ}KLMN{OPQ}RSTU";
my @m = $str =‾ /(¥{[^¥}]+¥})/g;
2422362006/02/20(月) 03:11:09
>>241
教えてくれた通りで無事できました。
助かりました。どうもありがとうございました。
243デフォルトの名無しさんsage2006/02/20(月) 17:43:37
>>242
(`・ω・´) いえいえ どういたしまして
244デフォルトの名無しさんsage2006/02/20(月) 19:33:50
最近始めました。
わかんなかったらここで聞こうと思ってたけど、
案外簡単にできちゃうから聞くこと無いやw
245デフォルトの名無しさんsage2006/02/20(月) 21:36:23
つーかregexpの本k
246pp2006/02/22(水) 22:35:51
sedという物で設定した正規表現を他の言語に移植したいのですが
以下の表現の意味がわかりません。特に ">><<" の部分
どのたか解るかた教えてください。
s/\([A-Za-z]\)\([']\)/\1>><<\2/g
s/\([']\)\([ A-Za-z]\)/>><<\1\2/g
s/\([A-Za-z]\)\([-,.:;']\)\([ A-Za-z]\)/\1>><<\2\3/g
s/\([A-Za-z]\)\([-,.:;']\)$/\1>><<\2/g

s/>><</ /g
247デフォルトの名無しさんsage2006/02/22(水) 22:42:38
単なるセパレータとして使ってるだけじゃねーの
248デフォルトの名無しさんsage2006/02/22(水) 22:44:15
> s/\([A-Za-z]\)\([']\)/\1>><<\2/g
ABC' => ABC>><<'

ってな感じと思うよ。
249デフォルトの名無しさんsage2006/02/22(水) 22:58:09
>>247 の補足になるかもしれないけど、
「>><<」っていう特殊な正規表現があるわけじゃなくて、
仮にいったん「>><<」という文字列に置き換えておいて、
最後に「>><<」をまとめて目的の文字列に置換しているんだと思う。

普通のテキストに出てこなそうな文字列なら
「>><<」じゃなくてもどんな文字列でも良かったと思われ。
250pp2006/02/22(水) 23:21:19
>>247-249 ありがとうございます。
言われてみればそんな気がしてきました。
幾つかの文字列パターンを作って実際に試してみます。
251sagesage2006/02/22(水) 23:33:07
ぐはっ。繰り返しのメタキャラなんてないじゃん。
例がおかしかった。

○ A' => A>><<'

っす。スマソ
252・∀・)っ-○●◎- ◆Pu/ODYSSEY sage2006/02/22(水) 23:51:25
何かのAAかとオモタ
253デフォルトの名無しさんsage2006/02/23(木) 00:24:04
AAじゃないですよ (>_<)
254デフォルトの名無しさん2006/02/23(木) 02:18:04
団子はあらゆるスレに顔を出すな
255デフォルトの名無しさんsage2006/02/23(木) 11:46:59
> ・∀・)っ-○●◎- ◆Pu/ODYSSEY

こいつか?
書き込んでる内容を見るとワナビーのようだが
256デフォルトの名無しさん2006/02/23(木) 11:58:54
正規表現ってエッチな響きですね ><
s/ちんこ/まんこ/k こうですか?わかりません!><
257デフォルトの名無しさんsage2006/02/23(木) 13:41:25
団子先生はアレでもソフ開持ち
258デフォルトの名無しさんsage2006/02/23(木) 14:38:26
mjsk
259デフォルトの名無しさんsage2006/03/01(水) 17:19:38
VBScriptなんですが、
テキストフィールドの中身が改行文字とスペースのみで構成されたデータをピックアップしたいのです。
この場合、どう書いたらいいですか?
260デフォルトの名無しさんsage2006/03/01(水) 22:56:47
Perlなんですが

 びちびちウンコ
 下痢便
 かちかちウンコ
 巻き巻きウンコ
 ウンチッチ
 ふつうウンコ
 野グソ
 犬ウンコ

という文字列があったとして、「ウンコを含む文字列にマッチ、ただし『かちかちウンコ』は除く」
という指定はどうやったらいいでしょうか?
 びちびちウンコ
 巻き巻きウンコ
 ふつうウンコ
 犬ウンコ
だけを抜き出したいです。
261デフォルトの名無しさん2006/03/01(水) 23:27:57
       __,,,...............,,__、
     .,,::'゙;'''""''゙''''゙゙""''ニ=;;;;..`.、
     lッ'゙           ゙;;;;;;::.,,、
    /´_,,,..      ..,,,_    ゙{;;;;;;;i
    f''"゙  、  . '   ゙゙゙"`   'i;;;f ヽ
    l ;-。= .}     =。-、    |:;l .;:!
    }  ̄ ;       ̄     1{ bl
    !、  .,.,,,,、      ノ  、ソ
    'i   ' `゛  `        i;;;   ここは俺のスレ。
    ヽ _,.=ニニニ=__,、     ' l;;'   俺に (*´Д`)ハァハァ すればいい
     i   `¬―'´     ノ  |
      'i,        ,/   |
       )`ー---― '
262デフォルトの名無しさんsage2006/03/01(水) 23:58:02
>>260

(?!かちかち)ウンコ
263・∀・)っ-○●◎- ◆Pu/ODYSSEY sage2006/03/02(木) 00:02:16
プロバのメールのSPAMフィルターで正規表現使えたらと思う京子の頃
264デフォルトの名無しさんsage2006/03/02(木) 00:21:10
顧客サポート (質問の対応とか) すんのめんどくさいんだよねー
265デフォルトの名無しさんsage2006/03/02(木) 17:38:22
メーラーの方で正規表現を使えばいいと思う。
266デフォルトの名無しさんsage2006/03/02(木) 21:49:11
どうしてWebProg板の正規表現スレは落ちたのに、新しく立てないんですか?
267デフォルトの名無しさんsage2006/03/02(木) 21:50:47
需要がないから
268デフォルトの名無しさんsage2006/03/02(木) 23:57:27
use utf8;

if ((/ウンコ/) && ($_ ne "かちかちウンコ")) {

}
269デフォルトの名無しさんsage2006/03/03(金) 00:45:38
長く議論するほど扱いが難しいシロモノじゃないだろ。
続けるとしたら実装方式とかパッチの当て方とかそっち方面だな。
270・∀・)っ-○●◎- ◆Pu/ODYSSEY sage2006/03/03(金) 00:46:38
そろそろ xpressive VS 鬼車
271デフォルトの名無しさんsage2006/03/03(金) 09:50:44
>>269
誤爆?
272デフォルトの名無しさんsage2006/03/03(金) 12:43:57
>>263
それなんてプロバイダ?
普通使えね?
273デフォルトの名無しさんsage2006/03/03(金) 12:47:24
>>272
それなんてプロバイダ?
274デフォルトの名無しさんsage2006/03/08(水) 10:44:19
syslogからプログラム名とIPアドレスを抜き出したいと思っています。
(syslog-ngでの進入検知スクリプト)
Mar 8 10:22:01 host01 ftp(pam_unix)[8094]: authentication failure; logname= uid=0 euid=0 tty= ruser= rhost=
というログを標準入力として、以下の通り処理を流すと

while ($data = ) {
if ($data =‾ /¥s(¥w+)¥[.*¥]:.*¥[([¥d¥.]+)¥]/){
$hack = $2;
if ($1 eq $ftpd) {
$port = 21;
}elsif ($1 eq $sshd) {
$port = 22;
}else{ next;}

という感じで$1がプログラム名、$2がIPになるはずらしいんですが
どうもそうなっていないようなんです。
正直さっぱりわからないんですが
正規表現をどう変えたらいいでしょうか。
275デフォルトの名無しさんsage2006/03/08(水) 11:06:18
>>274
特に難しい機能を使っているわけでもないので一つずつ丹念に追えば
わかると思うが、これがさっぱりわからないんなら勉強が足りなすぎると
思われる。
276デフォルトの名無しさんsage2006/03/08(水) 12:49:57
>>274
その気持ち悪い言語はもしや、Perlとか言うものか?
277デフォルトの名無しさんsage2006/03/08(水) 19:27:37
var ftpd = "ftp";
var sshd = "ssh";
while (! WScript.StdIn.AtEndOfLine) {
    var data = WScript.StdIn.ReadLine();
    var port, hack;
    if (/¥s(¥w+)¥S+¥:¥s.*rhost=(¥S+)/.test(data))
        hack = RegExp.$2;
    if (RegExp.$1 == ftpd)
        port = 21;
    else if (RegExp.$1 == sshd)
        port = 22;
    else
        continue;
    WScript.StdOut.WriteLine(port + ", " + hack);
}
278デフォルトの名無しさんsage2006/03/08(水) 19:54:39
my $services = {
ftpd => 21,
sshd => 22,
};

while (my $data = ) {
if ($data =‾ /¥s(¥w+)¥S*?¥[[^]]+¥]:.*rhost=([¥d¥.]+)/) {
my ($port, $hack) = ($services->{$1}||$1, $2);
printf "%s¥t%s¥n", $port, $hack;
}
}
279酩酊 ◆TWARamEjuA sage2006/03/08(水) 20:36:47 ?#
Mar 8 10:22:01 host01 ftp(pam_unix)[8094]: authentication failure; logname= uid=0 euid=0 tty= ruser= rhost=

syslogのフォーマットなんてそうめったやたらと変わるもんじゃないと思うのです。

my ($date, $host, $message) = $line =‾ m|([a-z]{3} ¥d+:¥d+:¥d+) (¥w+) (.+)|;
程度で良いんじゃないかなぁ。
280デフォルトの名無しさんsage2006/03/08(水) 22:50:32
>>279
相手が初心者だと思ってバカにしてるのかもしれないが、
せめてテストくらいしてからレスしろよな。
281酩酊 ◆TWARamEjuA sage2006/03/08(水) 23:08:46 ?#
>>280
ぐはっ、、、m(_ _)m

今日、何回目だろうか。。。鬱。
282デフォルトの名無しさんsage2006/03/08(水) 23:30:14
あんまり怒らないでください
283デフォルトの名無しさんsage2006/03/08(水) 23:47:07
すまんこ。

ていうかね、元の質問では「接続元ホスト」と「ポート番号」を抽出したいんだと思うのだが、
>>279 はそのどちらもできてねー。
284デフォルトの名無しさんsage2006/03/09(木) 01:06:41
まったり仲良くいこうや
過疎スレなんだから
285デフォルトの名無しさんsage2006/03/09(木) 10:58:58
>>274
$ftpdと$sshdの条件にひっかからないだけ
なんて落ちじゃないよな?
286デフォルトの名無しさん2006/03/10(金) 01:08:44
お取り込み中のところ失礼します。

当方スパムフィルター用の正規表現を作ろうと画策中の素人ですが、
例えば""というアカウント以外の
全hotmailアカウントにマッチさせたい場合どのような表現が考えられるでしょうか?

ぼんくら頭で都合よく考えるに

^¥¥([^【1】]【2】.*¥¥)@hotmail.com

という表現の内の【1】の部分に任意の文字列("hogehoge")、
【2】の部分に"∧:and"にあたるメタ文字が
入いれば良いのではないかと想像したのですが、
そういう都合のいい表現はどうも無いようです。

ようするに基本的に理解できていないのですが、
煮詰まってしまって何も思い浮びません。
どうかひとつ御助力お願いいたします。

なお正規表現はEmacsのものです。
287デフォルトの名無しさん2006/03/10(金) 02:19:03
オッス、オラ悟空!

あたまに hoge がついていて、 おしりに gz がついていない
というのを正規表現であらわしたいと思っています。

みんな、オラといっしょに考えてくれ!
288・∀・)っ-○●◎- ◆Pu/ODYSSEY sage2006/03/10(金) 02:28:57
Perl互換なら ^hoge.*(?!gz)$
289デフォルトの名無しさんsage2006/03/10(金) 06:20:17
>>286
フィルター マッチングルール の検索結果 約 463 件中 1 - 50 件目 (0.47 秒)
290デフォルトの名無しさんsage2006/03/10(金) 10:26:01
>>288
'hogegz' =‾ /^hoge.*(?!gz)$/ は真になる。
.* が gz を食えばその後ろに gz は無く、行末に到達できるからだ。

^hoge.*(?
291286sage2006/03/10(金) 22:23:43
>>289
レスどうも。
私の検索結果とどうも違うようです。

フィルター マッチングルール の検索結果 約 1,110 件中 1 - 82 件目 (0.30秒)

それにこの検索結果の中には具体的な正規表現の話題は少ないようです。
それともなにか別のことを示唆されているのでしょうか。

問題を「任意の文字列を含まない」パターンに対するマッチングということにしぼってみました。
Perlにおける一般的な表現というのはあるサイトで見つけたのですが、
なるほどPOSIX準拠では煩雑になるのですね。
これまたとある別のサイトに正規表現を生成してくれるJavaスクリプトがあったので、
それで「"hoge"を含まない」行にマッチするものを作ってみたのですが…。

^(((((([^h]*)*(h+[^o][^h]*)*)*)*(h+o[^g][^h]*)*)*)*(h+og[^e][^h]*)*)*$

これをxyzzyで試してみたところ固まってしまいました(orz)ので
"hog"にして再び挑戦してみてやっと機能することが確認できました。
それでもたった10行ほどを検索するのに4、5秒かかります。

実用向きには私は何か全く別の方法を考えるべきなのでしょうか?
また、実用云々は抜きにしても、別のスマートな表現があれば教えていただければ幸いです。
292・∀・)っ-○●◎- ◆Pu/ODYSSEY sage2006/03/10(金) 23:12:44
ちょwwww
ものすごいバックトラックが起きそうですな。
293デフォルトの名無しさんsage2006/03/10(金) 23:43:52
そのスパムフィルターなら正規表現使わなくてもできる
294デフォルトの名無しさんsage2006/03/11(土) 01:29:31
>>291
その正規表現、笑える。
頭の中でオートマトンがマンダラを描いて今にも爆発しそうです。
295286sage2006/03/11(土) 01:35:22
>>293
やはりそうですか...orz。
例えば一番始めに考えたのは、"^.*@hotmail¥¥.com$"を全部ゴミ箱に移して、
その後"^hogehoge@hotmail¥¥.com$"だけ救出するという馬鹿みたいな方法だったのですが、
これはいくらなんでも鈍臭い気がしまして。
スパムフィルターの件についてはくだ質に行ってみます。

けれどこう言った表現は結構使う機会がありそうな気がするので、
後学の為に一般的にはどういうふうに解決するのかな、という興味があります。
あと最短一致とかも確かPerlにしかないんですよね。
これは無くても差し支えがない(あっても意味がない)、ということなんでしょうか?
それとも技術的に実装が難しいのでしょうか?

>>292>>294
なんとなくサグラダファミリアのようなハノイの塔を想像しました。
296デフォルトの名無しさんsage2006/03/11(土) 03:32:08
正規表現的には (?!)等が使えないなら遷移図から>>291をガリガリ算出するしかないと思う。
ただ、スパムフィルターという性質を考慮すれば「^([^h]|.[^o]|..[^g]|...[^e]).*@hotmail.com$」くらいで十分実用的じゃないかということでもある。
メーラ選んで>>293にするのが理想なんだろうけど。
あと最短一致程度なら利用できない場合の方が少ないんじゃない?
297デフォルトの名無しさんsage2006/03/11(土) 03:39:34
要するに、ホワイトリストが使えないスパムフィルターなんか捨てちまえ、と。
298デフォルトの名無しさんsage2006/03/11(土) 10:39:38
>>291
爆笑しました。そして固まりました。

>>295
一般的には、可読性を考慮して2パスにすると思うよ。

>>286
Emacs 使ったこと無いけど、エスケープは ¥ を2つ書くらしいことは分かりました。

javascript:(function(){var v='hogehoge';do{v=prompt('救済するユーザIDを入力してください。',v)}while(prompt(v+' さんだけを救済する削除対象マッチの正規表現を書いてみました。','^'+function(s){var x='',l=s.length;if(l>0)
{x='('+(l>1?'.{0,'+(l-1)+'}|':'')+'.{'+(l+1)+',}|'+function(s){var c=l-s.length;var x=(c?'.{'+c+'}':'')+'[^'+s.charAt(0)+']';if(s.length>1){var r=s.substr(1);x=arguments.callee(r)+'|'+x+r}return x}(s)+')'}return x}(v)+'@hotmail¥¥¥¥.com$'))})();

上のコードは、行を連結さえすれば... きっと動きます。
299デフォルトの名無しさんsage2006/03/11(土) 12:13:40
Emacs の正規表現を読み進めていったら、グループ括弧やORにも ¥¥ が必要らしい。
さらに、文字の繰り返は * + ? しか見当たらない。orz

だとすると、
.{0,3} --> .?.?.?
.{5,} --> .....+

例えば、これが

^(.{0,3}|.{5,}|.{3}[^e]|.{2}[^g]e|.{1}[^o]ge|[^h]oge)$

こうなるってことかな?

^¥¥(.?.?.?¥¥|.....+¥¥|...[^e]¥¥|..[^g]e¥¥|.[^o]ge¥¥|[^h]oge¥¥)$

うん、おなかすいたから、これでいいことにしようっと。
300デフォルトの名無しさんsage2006/03/11(土) 15:15:19
Emacs だと、繰り返しの {} にも ¥¥ が必要。
¥¥{0,3¥¥} とか ¥¥{5,¥¥} とか書けば使えるよ。
301286sage2006/03/11(土) 15:53:42
おお、なにやら親切な方々が。
今ちょっと手が開きそうにないので、夜に確認してみたいと思います。
ありがとう、ありがとう。
302レベル5デスsage2006/03/11(土) 16:16:03
×手が開く
○手が空く
303デフォルトの名無しさん2006/03/11(土) 16:45:20
1.(?!¥d000) だと半角数字1桁+000が続かないものって意味ですか?

2.としたら
マッチ 1000 10005 100056 1000567
アンマッチ 10002000
ということですか?
304デフォルトの名無しさんsage2006/03/11(土) 18:19:33
(?!¥d000)は”先読み”をする”幅0”のパターン
305デフォルトの名無しさん2006/03/12(日) 00:38:03
ある文字列を含まない文字列

^((?!文字列).)*$

でできるよ。


^((?!hogehoge).)*@hotmail.com$
306デフォルトの名無しさんsage2006/03/12(日) 00:40:29
>>305
それを Emacs Lisp の正規表現で
307デフォルトの名無しさん2006/03/12(日) 00:46:02
ごめん、^((?!hogehoge).)*@hotmail.com$ はだめだ
でもこの辺使えば何とかなるよ
308デフォルトの名無しさんsage2006/03/12(日) 08:50:44
>>300
ありがとう。{ } も使えるんですね。

>>307
^(((?!hogehoge).){0,8}|.{9,})@hotmail¥.com$
いや、そもそも ?! 使わずに...
って、もしや... Emacs で ?! 使えたりして? or2 <--おしりの形がちょとセクシー
309デフォルトの名無しさんsage2006/03/12(日) 22:03:38
指定した数以上の連続する改行を指定した数の改行に変換したいのですが
どういう方法がスマートでしょうか?

¥nに{}は効かないようなので¥n¥n¥n¥nを¥n¥n¥nに置換するのを数回繰り返すという
方法で誤魔化してます。
秀丸エディタでマクロに使いたいのですが。
310デフォルトの名無しさんsage2006/03/12(日) 22:35:55
¥n¥n¥n¥n+
311デフォルトの名無しさんsage2006/03/12(日) 22:43:58
>>310
レスどうもです。
改行だと最長一致がうまくいかないのか、それも4つの改行が
マッチしたところで終わってしまうんですよ。
エディタ側の問題なんでしょうか。
312デフォルトの名無しさん2006/03/12(日) 23:33:30
>>311
ttp://homepage2.nifty.com/jr-kun/hidemaru_qa/4_regulr.html#RETURNS
313デフォルトの名無しさんsage2006/03/12(日) 23:33:38
>>311
その他(O) → 秀丸エディターヘルプ(P) → 検索系コマンド →
「¥nを使った複数行検索の際の制限について」を読もう。
314デフォルトの名無しさんsage2006/03/13(月) 00:01:37
>>312-313
お手数をおかけして申し訳ありませんでした。
315デフォルトの名無しさんsage2006/03/13(月) 21:43:22
このスレのまったりした流れが好きです。
でも正規表現初心者です。
どこか解説サイトを教えてください。
言語ならperlがいいです。m(_ _)m
316デフォルトの名無しさんsage2006/03/14(火) 00:31:20
perlなんて死滅すればいいのに
317デフォルトの名無しさんsage2006/03/14(火) 01:08:04
>>315

ttp://perldoc.perl.org/perlretut.html

これでも読んで勉強しる。
318デフォルトの名無しさんsage2006/03/14(火) 01:15:14
>>317
ありがとうございます。
できれば日本語で初心者向けを
おねがいします。m(_ _)m
319デフォルトの名無しさんsage2006/03/14(火) 02:11:33
>>318
ほい、和訳。
http://www.kt.rim.or.jp/‾kbk/perl-5.8/perlretut.html
320デフォルトの名無しさんsage2006/03/14(火) 09:11:44
>>318
自分も最初、Webでやろうと思ったけど頭そんなに良くないからすぐ挫折した。
これ↓がいいと思うよ。
全て例題形式だから分かりやすかった。

正規表現ケーススタディブック:
321デフォルトの名無しさんsage2006/03/14(火) 09:46:11
最近はいっぱい本が出てていいよね。

そんな俺が最初に正規表現に触れたのは「sed は日暮れて」だった。
322デフォルトの名無しさんsage2006/03/14(火) 10:07:37
その著者、「小柳Ruby子」って続編書いてない?
323デフォルトの名無しさんsage2006/03/14(火) 15:06:27
正規表現って解説本読んだところで・・・ってかんじ
本読んだら ^((?!文字列).)*$ が思い浮かぶか
といったらそうでもない。
売られている正規表現本ってただのパターン集じゃん。
324デフォルトの名無しさんsage2006/03/14(火) 15:23:29
ほほう。それで?
325デフォルトの名無しさんsage2006/03/14(火) 20:14:53
>>319-320
どうもありがとうm(_ _)m
326デフォルトの名無しさんsage2006/03/14(火) 21:40:17
その昔、メガバイト近い正規表現を読んだり書いたりした事がある(涙
327酩酊 ◆TWARamEjuA sage2006/03/14(火) 22:05:58 ?#
>>326
はぶらし?
328http://www.vector.co.jp/soft/win95/util/se072729.htmlhttp://msdn2.microsoft.com/ja-jp/library/h2k70f3s.aspx2006/03/18(土) 21:00:19
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?

そういや64bitにネイティブ対応している2chブラウザてありましたっけ?

329デフォルトの名無しさんsage2006/03/21(火) 21:06:30
 にんじん  200円

  はくさい  150円

  じゃがいも   300円


このような文字列から、野菜の名前と値段をセットにして抽出したいのですが、
「 のいくつかの繰り返し」を表現するにはどのようにすればいいのでしょうか。

330デフォルトの名無しさんsage2006/03/21(火) 21:09:05
¥ 
331デフォルトの名無しさんsage2006/03/21(火) 21:11:59
すみません、*を&に置き換えてください。

*nbsp;にんじん*nbsp;*nbsp;200円

*nbsp;*nbsp;はくさい*nbsp;*nbsp;150円

*nbsp;*nbsp;じゃがいも*nbsp;*nbsp;*nbsp;300円


このような文字列から、野菜の名前と値段をセットにして抽出したいのですが、
「*nbsp;のいくつかの繰り返し」を表現するにはどのようにすればいいのでしょうか。
332デフォルトの名無しさんsage2006/03/21(火) 22:12:52
>>331
Perl で良い?

(*nbsp:)+
333デフォルトの名無しさんsage2006/03/21(火) 23:59:34
>>331
最終的にどのような形にしたいの?
にんじん 200
はくさい 150
のように項目名+適当な区切り+金額+改行
でいいの?

>「*nbsp;のいくつかの繰り返し」だけでよければ
>>332の通り
ただ、それではだめな実装もある
334デフォルトの名無しさんsage2006/03/22(水) 00:01:36
332さんのとおりでやりたいことが出来ました。
ありがとうございました。
335デフォルトの名無しさんsage2006/03/23(木) 00:18:36
http://aaa.com/?bb=ccc

このときcccを取るにはドウスレバいいの?
336デフォルトの名無しさんsage2006/03/23(木) 00:19:32
http://aaa.com/?bb=(.*)
337デフォルトの名無しさんsage2006/03/23(木) 02:38:28
http://aaa.com/?bb=ccc
このときに

http://aaa.com/?bb と ccc を取りたいのです
338デフォルトの名無しさんsage2006/03/23(木) 02:39:25
http://aaa.com/?ddd=eee の時もあります
339デフォルトの名無しさんsage2006/03/23(木) 02:52:25
(.*)=(.*)
340デフォルトの名無しさんsage2006/03/23(木) 02:55:40
ありがとう
341デフォルトの名無しさんsage2006/03/23(木) 14:24:51
>>339
('A`;)ハァハァ
342デフォルトの名無しさんsage2006/03/23(木) 17:13:28
おっぱいかよ
343デフォルトの名無しさん2006/03/24(金) 01:02:08
正規表現って grep からはじめるのがいいって本当ですか?
344デフォルトの名無しさんsage2006/03/24(金) 01:35:18
敷居高いわけじゃないし何でも良いよ
345デフォルトの名無しさん2006/03/24(金) 02:29:40
各々ばらばらの仕様で、正規な正規表現なんて無いというのは本当ですか?
346デフォルトの名無しさんsage2006/03/24(金) 02:31:50
そうなんですか?
347デフォルトの名無しさんsage2006/03/24(金) 02:40:48
正規な正規表現はあるよ
348デフォルトの名無しさんsage2006/03/24(金) 09:14:27
perl互換だったら何でもいい
349デフォルトの名無しさんsage2006/03/24(金) 11:12:38
おおざっぱに言うと

grep(の基本的なもの)
Perl互換
POSIX拡張

の3つが主流になるのかな。まぁそれぞれ完全独立って
わけじゃないし、自分がメインで使うツールで勉強
すればいいんじゃないの?
350デフォルトの名無しさんsage2006/03/24(金) 18:33:29
ECMAScriptや.NET準拠の正規表現
351デフォルトの名無しさんsage2006/03/24(金) 18:55:25
それを言い出すと「おおざっぱに言うと」という前提が崩れる。
352デフォルトの名無しさん2006/03/25(土) 00:01:57
----


    あいうえお



かきくけこ
さしすせそ


    たちつてと


----
こういう文字列を
----
    


        あいうえお
    



かきくけこ
さしすせそ

    


        たちつてと
    


----
perl5の正規表現で、このように
要素以外をすべてスペースでインデントしたいです。
要素は無いかも知れないし、複数あるかも知れません。

$text =‾ s/¥n/¥n        /g;
こうすれば当然、全てインデントされてしまいます。
だけ除外する方法を教えてください。

※スペースは全角で入れていますが、実際は半角です。
353デフォルトの名無しさん2006/03/25(土) 00:13:34
.*
以外をインデントするのが、そんなに難しいことなのでしょうか。
354デフォルトの名無しさんsage2006/03/25(土) 06:40:38
perlなんか使うから面倒なんだよ。awkならこれだけ。

/
/ {
preFlag = 1;
}
{
if (!preFlag) {
printf("indent");
}
print;
}
/<¥/pre>/ {
preFlag = 0;
}
#って、書いておきながら/preの/をエスケープする必要があったかどうか不安な漏れ
355デフォルトの名無しさんsage2006/03/25(土) 13:49:38
簡単ではないんじゃね?

$text =‾ s/(?:
.*<¥/pre>|(?:^|(?<=¥n))(.))/($1)?" $1":$&/sge;
356デフォルトの名無しさんsage2006/03/25(土) 15:20:35
mも使えなくはない

$text =‾ s/(?:¥n?
.*?<¥/pre>|(^))/defined($1)?"¥t":$&/sgme;
357355sage2006/03/25(土) 18:59:47
なるほど。
いまだに Perl の正規表現の m と s が使いこなせてない
(というか使い分けがうまくできてない) ヘタレな漏れ・・・orz

しかし、どうも >>355 の (?:^|(?<=¥n)) とか >>356 の ¥n? が
いまいちキレイじゃない気がするんだよなあ。
もっとキレイな解法があればよろしく。
358356sage2006/03/26(日) 05:37:40
下線を任意の文字列、行の概念も捨てて表現すると…

 __¥n__¥n
¥n__¥n
¥n__¥n__
.↑   ↑                    ↑   ↑
希望するインデントの挿入位置はここ

 __¥n__¥n
¥n__¥n
¥n__¥n__
.↑   ↑   ↑    ↑    ↑    ↑   ↑
mオプション付与時の ^ のマッチ位置はここ

3番目の矢印の位置に^がマッチする前に
を食い切ればいい。
あらら、「¥n?」いらないっぽい。

ということで推敲してこうなった。
$text =‾ s/(?:(
.*?<¥/pre>)|^)/$1||"¥t"/sgme;
359352sage2006/03/26(日) 13:55:09
質問者です。

>>358を読んだら、>>355-356も含めてなんとか
理解できた気がします。
>>そして358で実際にうまく動作しています。

mとsを同時に指定したときの動作が、私はよくわかってないようです。
これから勉強してきます。

ありがとうございました。
360デフォルトの名無しさん2006/03/26(日) 16:50:23
半角英数字以外を特定のタグで括りたいと考えてます。
 変換前:abcDEF123456
 変換後:abc<半角英数以外>DEF半角英数以外>123<半角英数以外>456半角英数以外>
どのようにしてやればよいのでしょうか。教えてくだされ、神な人。。。
361デフォルトの名無しさんsage2006/03/26(日) 20:16:57
検索:(((?![a-zA-Z0-9]+).)+)
置換:<半角英数以外>¥1半角英数以外>
362デフォルトの名無しさんsage2006/03/26(日) 20:20:30
前にも書いたけど、ある文字列を含まない文字列という表現
((?!文字列).)* は(?!)が使える環境なら結構便利。
363デフォルトの名無しさんsage2006/03/26(日) 21:31:06
s/([^0-9A-Za-z]+)/<半角英数以外>$1<¥/半角英数以外>/g;
364デフォルトの名無しさんsage2006/03/26(日) 21:41:26
ふつうに考えればそっちだな
ちょっと調子に乗りすぎてた、すまん
365360sage2006/03/26(日) 22:06:53
神な皆様すごいっす。ありがとうございます。
なぜか、文字コードと格闘しむずかしくムズカシク考えすぎてたっす。
多謝。
366デフォルトの名無しさんsage2006/03/27(月) 02:33:09
[hoge]
のhogeを抜き出したいのですが、
[や]はパターン文に使えないですよね?
どのようにすればいいでしょうか
367366sage2006/03/27(月) 02:35:56
.NETなのですが、「¥[」などとすると
認識出来ないエスケープシーケンスです。
というエラーになります。
368デフォルトの名無しさんsage2006/03/27(月) 02:44:36
.NET はよく知らないんだけど、そのエラーを出してるのは正規表現エンジンじゃなくない?
"...¥¥[...¥¥]" みたいにしてみては?
369デフォルトの名無しさんsage2006/03/32(土) 08:58:42
123から1,2,3を一回の表現で作りたい。いまは改行で取り除いて2回かかってる。無理な注文かな
370デフォルトの名無しさんsage2006/03/32(土) 17:56:52
>>369
どんな値をどんな法則でどうしたいのか条件が不明瞭。
ついでに、例示を含めて質問文が1行しかないのに改行云々まで言い出すのは無理な注文だよ。

# なるほど、正規表現が難しいって言ってる人は問題認識が出来てないんだね
371369sage2006/03/32(土) 18:18:24
([0-9])と¥1,
,¥nと¥n
の二回の置換で369の置換を行っています。これを一回でできれる表現があるのかなと
372デフォルトの名無しさんsage2006/03/32(土) 18:31:33
>これを一回でできれる表現があるのかなと
日本語でどうぞ。
373デフォルトの名無しさんsage2006/03/32(土) 19:13:35
なるほどね。(?=...)文が使えるならgオプションと共に1回でできる。
$str = "aaaa123bbbb456";
$str =‾ s/(?<=¥d)(?=¥d)/,/g;
374369sage2006/03/32(土) 19:38:24
<が使えない場合、どうしますか
375デフォルトの名無しさんsage2006/04/02(日) 02:04:37
>>374
出た!情報小出し!
376デフォルトの名無しさんsage2006/04/02(日) 04:00:30
この場合小出しじゃなくて便乗質問だろう。多分。
小出しなら氏ね
3773692006/04/02(日) 04:40:07
すまん。というか標準規格がどうなってんのかよく知らない。あんのかな
否定!の場所が限られているだとか謎が多いな、正規表現は
378デフォルトの名無しさんsage2006/04/02(日) 05:20:09
>>377

標準と呼べるのは POSIXあたりになるような気が駿河、Perlの拡張を(一部)取り込んだものも
それなりにあるから、何を使ってやりたいのかを明示したら?
379デフォルトの名無しさんsage2006/04/02(日) 06:00:49
>>377
質問するなら推敲してからにしてくれ
あと最低限の知識は
ぐぐって理解してくれ
380デフォルトの名無しさんsage2006/04/02(日) 09:53:20
>>374
373さんの置換操作と同じ結果を期待するなら、
s/¥d(?=¥d)/$&,/g

>>377
369さんが、この置換操作を「どの処理系で実行したいのか」が「謎」。
381デフォルトの名無しさんsage2006/04/02(日) 17:11:08
もうさあ、後から後から情報を小出しにする香具師はスルーしようよ。な。
382デフォルトの名無しさんsage2006/04/02(日) 17:47:36
>>381
いや、こういうのは開発者としていい練習になる。

情報を小出しにするクライアントから、いかに
効率よく「やりたいこと」の全容を引っ張り出すか。
デスマーチに陥ってるようなプロジェクトの半分は
SEやPGにこの「聞き出し」能力に欠けているパターン。
383デフォルトの名無しさんsage2006/04/02(日) 19:20:03
金にならん客は捨てろ
384デフォルトの名無しさんsage2006/04/02(日) 21:57:56
haihai
情報を小出しにした自分を正当化したいんでしょ
385デフォルトの名無しさんsage2006/04/03(月) 10:25:25
いや聞き出し方が悪いだろ
最低限、言語は何かっつーのは言わせないと
386デフォルトの名無しさんsage2006/04/03(月) 13:15:03
そんなこといちいち聞くの飽きちゃったYO!
387デフォルトの名無しさんsage2006/04/03(月) 19:09:03
>>382
それは該当する他スレでやってくれ
一般的なスレでやられると
馬鹿が助長して結果まわりが被害を被ることになる
388デフォルトの名無しさんsage2006/04/03(月) 23:19:16
おこらないで><

またーり進行きぼんぬ
389デフォルトの名無しさんsage2006/04/03(月) 23:20:04
嫌です><
390デフォルトの名無しさんsage2006/04/03(月) 23:22:39
ずっとROMしてまsつ。
過疎スレなんだし仲良くしてください。
391酩酊 ◆TWARamEjuA sage2006/04/03(月) 23:28:19
んぢゃksk♪
392デフォルトの名無しさん2006/04/07(金) 12:56:26
^.[^d][^t].*$
で検索かけたのですが、

とか

が引っかかってくれません。

やりたいことは
で始まらない行をすべて探したいのですが、
どうすればいいでしょうか?
393デフォルトの名無しさんsage2006/04/07(金) 12:58:37
どんな言語・ツールを使ってるか言わないと答えが得られにくいのでそのつもりで。
394デフォルトの名無しさんsage2006/04/07(金) 13:04:03
>393
秀丸です。
395デフォルトの名無しさんsage2006/04/07(金) 13:27:33
で始まる行を削除
396デフォルトの名無しさんsage2006/04/07(金) 14:58:40
>395
で始まらない行を置換ですべて取り除きたいんです。
397デフォルトの名無しさんsage2006/04/07(金) 15:02:57
>>392
正規表現は、基本的に「〜にマッチしないもの」を表すのは苦手なので、
「マッチするのは何か」で考えないと。

・< 以外で始まる行にはマッチする, or
・1文字目が <、2文字目が d 以外ならマッチする, or
・1文字目が <、2文字目が d、3文字目が t 以外ならマッチする

で正規表現を組み立ててみそ。
398デフォルトの名無しさんsage2006/04/07(金) 15:06:58
>>396

>395して、差分を取るとか。
#差分を取るツール? 自分で探せ。

>[^d][^t]
を[^d][^t][^>]に置き換えるとか。
#
にはマッチしちゃうけど。

秀丸で作業するのを諦めるとか。
#例えば grep '^
' でことが足りそうだ。
399デフォルトの名無しさんsage2006/04/07(金) 15:18:39
^[^<]|^<[^d]|^ みたいですね。
どうもありがとうございました。
400デフォルトの名無しさんsage2006/04/07(金) 15:43:06
とんでもない穴にはまりました・・・
ttp://mata-ri.tk/up1/src/1M1626.txt.html
パスは123です。
このデータから何回かの置換を行って確実にIDだけを抜き出したいのですが、
208・584行目のトラップがどうにも抜けられません。

プログラムで完全自動処理できるようにするつもりですので、
手動でやれ!は勘弁してください。
正規表現は
ttp://www.hi-ho.ne.jp/babaq/bregexp.html
のを使用します。
401デフォルトの名無しさんsage2006/04/07(金) 23:50:44
ID:(キャプチャ)(入るかもしれない文字列)?
402デフォルトの名無しさんsage2006/04/07(金) 23:51:47
^((?!
).)*¥n
403400sage2006/04/08(土) 01:05:31
>>402
1つも引っかかりません
404デフォルトの名無しさんsage2006/04/08(土) 01:25:24
402は>>392>>396宛だろう
間違ってるけどなw
405デフォルトの名無しさんsage2006/04/08(土) 09:57:51
(.*) :(.*):(.*)ID:(.*)
406デフォルトの名無しさんsage2006/04/09(日) 03:31:22
hogehoge
みたいなHTML中の行から、/img/hogehoge.jpgだけ抜くには、どういうパターンにすればよい?

あちこちの正規表現解説サイト見たけど、具体例が少なくて理解不能。orz
具体例が多くて、馬鹿丁寧に解説してあるウェブページ無い?
407デフォルトの名無しさんsage2006/04/09(日) 05:25:04
>>406
本当に必ずその例の通りと決まってるなら、
sed 's/[^"]*"¥([^"]*¥)".*/¥1/'
408デフォルトの名無しさんsage2006/04/09(日) 09:13:05
>>406から後出しが来る。間違いない。
409デフォルトの名無しさんsage2006/04/09(日) 10:00:31
具体例が多くて、馬鹿丁寧に解説してあるウェブページ無い?
なんて文句が多いくせに自分の質問は思いっきり手抜きだからな
410デフォルトの名無しさん2006/04/09(日) 10:04:47
その程度で具体例がないとわからない程度しか正規表現を理解してない
のはなにも勉強してないのと同義じゃないだろうか...
411デフォルトの名無しさんsage2006/04/09(日) 11:04:01
じゃあ、なにも勉強してなくても正規表現を使えるように成るページを教えてやればいいかと。
情報工学の学生とかだと、正規表現の理論を覚える事が重要だけど、一般人には実際の使い方で十分でしょ。
自動車工学の学生はエンジンの仕組みとか覚える必要が有るけど、一般人はスタートキー押してアクセル踏めばいいだけ。

rubyだとこんな感じかな。
#!/usr/bin/ruby
href_links_array = []
open("index.html") {|file|
 while line_strings = file.gets
  href_link = line_strings.gsub!(/.*href="(.*?)".*¥n/i, '¥1')
  if href_link != nil then
   href_links_array.push(href_link)
  end
 end
}
p href_links_array
412デフォルトの名無しさんsage2006/04/09(日) 11:13:27
line_stringsは捨ててるから、
href_link = line_strings.gsub(/.*href="(.*?)".*¥n/i, '¥1')
で十分。まだまだ修行が足りんな。
413デフォルトの名無しさんsage2006/04/09(日) 11:15:16
どうでもいいけど、
>スタートキー押して
に思いっきり違和感。
414デフォルトの名無しさんsage2006/04/09(日) 12:06:08
おまいの車にスタートボタン付いてないだけじゃ?
415デフォルトの名無しさんsage2006/04/09(日) 12:08:07
イグニッション
416デフォルトの名無しさん2006/04/09(日) 12:20:09
日本語の文字に対応した正規表現てないよね

¥hでひらがな
¥kで漢字
とかほしいのに
417デフォルトの名無しさんsage2006/04/09(日) 12:25:14
>>416
文字コードとか面倒だからねえ。
実装したら公開してちょーだい。
418デフォルトの名無しさんsage2006/04/09(日) 12:26:39
.NET Framework なら UNICODE ブロック名使って、
¥p{IsHiragana} とか ¥p{IsCJKUnifiedIdeographs} とか書けるけど。

http://www.atmarkit.co.jp/fdotnet/dotnettips/054iskana/iskana.html
419デフォルトの名無しさんsage2006/04/09(日) 12:57:27
/あいうえお/i
とか出来ると便利かもね。
420デフォルトの名無しさんsage2006/04/09(日) 15:06:04
>>414
普通は「ボタンを押す」か「キーを回す」わけで、「キーを押す」ことでエンジンはかからないなぁと。
しかしそれ以前に、>411の一般人のような理屈で車の運転をして欲しくないと思うのだけど。
421デフォルトの名無しさん2006/04/09(日) 15:56:24
なにいってんのこいつ
422デフォルトの名無しさんsage2006/04/09(日) 16:28:40
仲良くしてください><
423デフォルトの名無しさんsage2006/04/09(日) 16:31:51
運転免許とるのと同じだけの時間と金をかければ正規表現なんて簡単に覚えられる。
424デフォルトの名無しさんsage2006/04/09(日) 16:44:14
そんだけやればPCRE実装出来るわな。
425デフォルトの名無しさんsage2006/04/09(日) 16:52:06
>>424
んなわきゃあない
426デフォルトの名無しさんsage2006/04/09(日) 17:31:07
いや余裕
427デフォルトの名無しさんsage2006/04/09(日) 17:43:18
ゼッテームリ
428デフォルトの名無しさんsage2006/04/09(日) 17:46:21
そりゃぁ誰でもF1レーサーになれないのと同じことだろ。
429デフォルトの名無しさんsage2006/04/09(日) 18:22:39
F1レーサーになるのと同じだけの時間と金をかければ正規表現なんて簡単に覚えられる。
430酩酊 ◆TWARamEjuA sage2006/04/09(日) 18:33:33 ?#
おとなになるのと同じだけの時間と金をかければ正規表現なんて簡単に覚えられる。
431デフォルトの名無しさんsage2006/04/09(日) 19:07:16
JavaでHTMLタグを削除する正規表現はどうすればいいのでしょうか?
432デフォルトの名無しさんsage2006/04/09(日) 19:10:06
丸投げはいかんよ
433デフォルトの名無しさんsage2006/04/09(日) 20:53:47
つまり正規表現を使いこなせるには国際ライセンスが必要と。
一般人に優しくない技術ですね。

ヒント:Javaの宿題スレ。
434デフォルトの名無しさんsage2006/04/09(日) 21:28:00
正規表現ってそんなに難しいか??
435デフォルトの名無しさんsage2006/04/09(日) 21:52:19
アビバでパソコン検定取るのよりも簡単。
436デフォルトの名無しさんsage2006/04/09(日) 23:48:36
つか、なんでHTMLパーサ使わないのか謎。
厳密でない構文処理してリンクの抽出とかやるのは
ある意味XMLよりやっかいかもしれんが。
437デフォルトの名無しさんsage2006/04/10(月) 20:48:56
文中に、ある文字列を含まない文をマッチさせる正規表現はどうすればいいんでしょうか?
438デフォルトの名無しさんsage2006/04/10(月) 21:21:52
NGワード
439デフォルトの名無しさんsage2006/04/10(月) 21:30:02
>>437
マッチするものの否定を取った方が楽ですよ
440デフォルトの名無しさんsage2006/04/10(月) 21:48:46
>>439
こんがらがってきてわからなくなってきました・・・
例としてmaxという文字列を含まないものをマッチさせるにはどうすれば・・・
441デフォルトの名無しさんsage2006/04/10(月) 22:02:34
ある文字列を含む文をマッチさせることで
ある文字列を含まない文を見つける
442デフォルトの名無しさんsage2006/04/10(月) 23:09:35
どんな言語・ツールを使ってるか言わないと答えが得られにくいのでそのつもりで。
443デフォルトの名無しさんsage2006/04/11(火) 03:00:25
>>440
このスレのログから「含まない」を含む記事にマッチさせればいい
444デフォルトの名無しさんsage2006/04/11(火) 09:41:50
理論的にはある正規表現Eにマッチしない文字列に
のみマッチする正規表現E'は存在するわけだが、
具体的にはどうすりゃいいのかね....
445デフォルトの名無しさんsage2006/04/11(火) 09:52:21
質問が抽象的だと具体的な回答が得にくい
446デフォルトの名無しさんsage2006/04/11(火) 09:58:33
存在はするけどすげーめんどくさい表現になるよ、つーことではないのかな。
いや俺も理論的な話はからっきしダメなんだが。
447デフォルトの名無しさんsage2006/04/11(火) 10:01:23
分かってねえなら口出すなよ
448デフォルトの名無しさんsage2006/04/11(火) 10:10:47
正規表現 マッチしない の検索結果 約 24,500 件中 1 - 10 件目 (0.24 秒)

正規表現
マッチ演算子とは、ある文字列が正規表現で表されたパターンにマッチするかどうか
を調べる演算子です。この演算子は、マッチした時には真を、マッチしない時に
は偽( 空文字)を返します。戻り値が真・偽となりますから、通常はif文やwhile文と
共に ...
www.komonet.ne.jp/‾perl/chap7.htm - 18k - キャッシュ - 関連ページ
449デフォルトの名無しさんsage2006/04/11(火) 11:22:58
こう?
^([^m]*($|m($|[^a]|a($|[^x]))))*$
450デフォルトの名無しさんsage2006/04/11(火) 13:58:00
>>444
ちょっとでもググればここひっかかるんだがな
http://www.din.or.jp/‾ohzaki/regex.htm#WithoutXY
あと「否定の正規表現」でググった1件目(のキャッシュ)

>>449
"mmax"がマッチ
451デフォルトの名無しさんsage2006/04/11(火) 16:58:48
あーなるほど。mmまで食っちゃうからだめか...

^([^m]*($|m+($|[^a]|a($|[^x]))))*$

だとmamaxがだめになるし。

後から攻めて

^([^x]*|[^x]*[^ax]x|[^x]*[^mx]ax)*$

とか。結構難しいなこれ。
452デフォルトの名無しさんsage2006/04/11(火) 21:21:33
^((?!max).)*$
453デフォルトの名無しさんsage2006/04/11(火) 21:45:43
特定のレスのことじゃないんだけどさ、
Perl Compatibleな正規表現と特に指定や断りのない限り、
なるべく一般性のある正規表現で書かないか?

最近すぐに (?...) って出てくるからつまんなくてさ。
454デフォルトの名無しさんsage2006/04/12(水) 11:00:05
ホント、つまらん奴だ空気嫁
455デフォルトの名無しさんsage2006/04/12(水) 11:13:08
一般性のある正規表現、ってのがもう既にそこはかとなくナンセンス。
456デフォルトの名無しさんsage2006/04/12(水) 11:53:37
先読み使えば一発なのはみんな知ってて遊んでるんだからさ...
457デフォルトの名無しさん2006/04/12(水) 16:59:40
JavaScript の質問用スレッドからきました。
if((L[i].href.match(/^.*¥.html$/)) || (L[i].href.match(/^.*¥.htm$/)))
この書き方を縮められませんでしょうか?
どうぞよろしく御願いします。
458デフォルトの名無しさんsage2006/04/12(水) 17:07:50
/^.*¥.html?$/
459デフォルトの名無しさんsage2006/04/12(水) 17:13:12
正規表現的にはわかりました。ありがとうございます。
460デフォルトの名無しさんsage2006/04/12(水) 17:29:23
if((L[i].href.match(/hoge/)) && (L[i].href.match(/hage/) && (L[i].href.match(/page/) && (L[i].href.match(/pyage/))
こういうのを縮めたいのですが、どうすればいいのでしょうか?
461デフォルトの名無しさんsage2006/04/12(水) 17:39:31
>>460
4つだったら4x3x2x1=24書けば1つの正規表現になるな。
/(hoge.*hage.*page.*pyage|hoge.*hage.*pyage.*page|...)/
462デフォルトの名無しさんsage2006/04/12(水) 17:49:01
それをさらにくくり出せるだろ。
/hoge.*(hage.*(page.*pyage|pyage.*page)|page.*(hage.*pyage)|...
463デフォルトの名無しさんsage2006/04/12(水) 18:01:28
単語の増減や変更が頻繁にあるならえらいことになりそうな。

素直に正規表現の配列をループで回してマッチした方が良いような。
464デフォルトの名無しさんsage2006/04/12(水) 18:16:21
あんまり正規表現使う意味が無いような
465デフォルトの名無しさんsage2006/04/12(水) 18:17:32
>>464
じゃあ何を使って文字列マッチをするの? index() ?
466デフォルトの名無しさんsage2006/04/12(水) 22:19:41
>>460
4パスを1パスに縮めてみました。
でも、コードは伸びちゃいました。or?
var a=[0,0,0,0];
L[i].href.replace(/((?=(hoge)|(hage)|(page)|(pyage)).)*/g,function(){for(var i=0;i if(eval(a.join('*')))alert('ぜんぶめっけ♪');

hogege の中に、hoge と gege をいっぺんに見つけたいなら、
食べない走査がいいのかも。(←意味不明なら読み飛ばしてね)
467デフォルトの名無しさんsage2006/04/12(水) 22:30:21
Perlの正規表現で
[0-9a-fA-Z]{16}で表せる文字列以外という表記はどのようになりますか?
また{16}が{8}、{12}、{16}のいずれかの場合というのはどのようにすればいいのでしょうか?
468デフォルトの名無しさんsage2006/04/12(水) 23:00:53
!/^[0-9a-fA-Z]{16}$/
/([0-9a-fA-Z]{4}){2,4}/
469デフォルトの名無しさんsage2006/04/12(水) 23:11:33
[^0-9a-fA-Z]{16}
470酩酊 ◆TWARamEjuA sage2006/04/12(水) 23:55:54 ?#
perlなら、s|[0-9A-Fa-f]{16}||gで消しちゃってもいいような。。。
471デフォルトの名無しさんsage2006/04/13(木) 01:52:22
ファイルの絶対パスからディレクトリ部分だけを抜き出すような場合、
どうすればいいんでしょうか。
例えば ‾/user/folder/file.txt から ‾/user/folder/ だけ。
472デフォルトの名無しさんsage2006/04/13(木) 02:12:19
>>471
Perl でいい?
m#([^/]+)$# で $1 とか。
473デフォルトの名無しさんsage2006/04/13(木) 02:26:40
Perl互換そんなに良いのかな。
マルチプロセッサを考えると探索の順序と枝刈に意味のあるPerlよりも
POSIXの方が実装的に将来性が高いのだが
474デフォルトの名無しさんsage2006/04/13(木) 03:14:32
>>472
ありがとうございます。
475デフォルトの名無しさんsage2006/04/13(木) 10:25:42
m#(.*/)#; じゃないの?
476472sage2006/04/13(木) 10:38:32
ゴメン、寝不足だな orz
477デフォルトの名無しさんsage2006/04/16(日) 02:23:23
正規表現って顔文字みたいですね(^_^)
478デフォルトの名無しさんsage2006/04/16(日) 06:42:30
(^-^)/(^o^)/
479デフォルトの名無しさん2006/04/21(金) 12:13:18
replaceを使って
間にある2つ以上のスペースを1つにするには
どうしたらできますでしょうか?

「小泉 純一」 → 「小泉 純一」
480デフォルトの名無しさん2006/04/21(金) 12:14:51
半角スペースが淘汰されたのでもう一度
「小泉   純一」→「小泉 純一」
481デフォルトの名無しさんsage2006/04/21(金) 12:29:47
replaceってなんですか?
sedでいいなら
s/  */ /g
482デフォルトの名無しさん2006/04/21(金) 13:13:37
>>481
ありがとう。
*だったんでした。
ちなみにreplaceは置換と言いたかったんです。

2chの半角スペースも正規表現でやってるのかな w
483デフォルトの名無しさんsage2006/04/21(金) 13:18:17
>>482
htmlは、本文中の空白を纏めるのが仕様です。
484デフォルトの名無しさんsage2006/04/21(金) 13:33:11
>>482
html のソースを見てみると >>483 の意味が良くわかると思う。
485デフォルトの名無しさんsage2006/04/21(金) 15:22:34
grep を使って foo が一行に2回以上登場する行を抽出したい場合、
どう書けばいい?
486デフォルトの名無しさんsage2006/04/21(金) 15:56:44
^.*foo.*foo.*$
487デフォルトの名無しさんsage2006/04/21(金) 16:09:56
grep 'foo.*foo'
488デフォルトの名無しさんsage2006/04/22(土) 02:46:57
>>486-487
thanks
489デフォルトの名無しさんsage2006/04/22(土) 15:10:21
XMLの中からDOCTYPEの部分だけマッチするパターンってどんなのですか?
490デフォルトの名無しさんsage2006/04/22(土) 16:09:16
<¥!DOCTYPE[^>]*>
これじゃ駄目なの?
491デフォルトの名無しさんsage2006/04/22(土) 16:25:42
>>490
パッと見間違ってるとこだけ直す

<¥!DOCTYPE[^>]*?>
492デフォルトの名無しさんsage2006/04/22(土) 16:26:22
ごめん間違ってなかたt
493デフォルトの名無しさんsage2006/04/22(土) 18:00:49
>>490
grepでやってみたけど改行が入ってるとマッチしない・・・
494デフォルトの名無しさんsage2006/04/22(土) 18:16:33
javaで "START"と"END"に囲まれた中で、最初に見つかったm=の値を取得したいのですが、以下の方法だとzzzが取得されてしまいます。

Pattern p = Pattern.compile("START.*¥¥s+m='([^']*)'.*END");
Matcher m = p.matcher("START m='abc' b='test' m='de' END START m='zzz' END ");
while (m.find()) {
String sValue = m.group(1);
System.out.println("Value=" + sValue);
}

正しい結果は
abc
zzz
と出力して欲しいのですが、どのような正規表現にしたらいいのでしょうか?
495デフォルトの名無しさんsage2006/04/23(日) 01:54:06
START.*?¥¥s+m='([^']*)'.*?END
496デフォルトの名無しさん2006/04/23(日) 02:25:02
htmlページ内の
平仮名を片仮名に変換するための正規表現を教えてください
497デフォルトの名無しさんsage2006/04/23(日) 02:49:02
tr/あ-ん/ア-ン/
498デフォルトの名無しさんsage2006/04/23(日) 03:14:31
>>493

なぜgrepを使う… grepは行をまたいでのマッチングはしないよ。
499デフォルトの名無しさんsage2006/04/23(日) 11:40:15
>>498
そうだっだんだ

でも、D言語のstd.regexpで使ったら出来たよ。
500デフォルトの名無しさんsage2006/04/23(日) 12:02:02
だから質問者はどんなツールを使うか書けと。
501デフォルトの名無しさんsage2006/04/23(日) 12:05:15
答えるやつが馬鹿
502デフォルトの名無しさん2006/04/23(日) 16:50:40
perlで、"で囲まれた文字列をマッチさせたくて".*?" と記述したのですが
"自体は含めない方法を教えてください
503デフォルトの名無しさんsage2006/04/23(日) 17:06:16
[^"]
504デフォルトの名無しさんsage2006/04/23(日) 17:48:56
"(.*?)"
こっちじゃないかな〜
505デフォルトの名無しさんsage2006/04/23(日) 18:22:24
含まれてる
506デフォルトの名無しさんsage2006/04/23(日) 19:48:12
]% perl -e '$_=q("aaa"); s/(?<=").*?(?=")/bbb/; print $_;'
"bbb"
507502sage2006/04/24(月) 13:34:01
>>504でやってみましたが結果変わりありませんでしたよ
おかいしな
508デフォルトの名無しさんsage2006/04/24(月) 13:46:02
>>507
何をしたいのか詳しく書け。
つーか、>503を無視すんじゃね。
509デフォルトの名無しさんsage2006/04/24(月) 13:52:35
>>507
>>504 は、マッチさせた後に $1 で取り出せばいい、と言ってると思うんだが、
意図は汲んでる?
510デフォルトの名無しさん2006/04/25(火) 01:51:07
正規表現が長くなってしまったので、二行に分けて書きたいのですが分ける方法はあるのでしょうか?
511デフォルトの名無しさんsage2006/04/25(火) 02:07:13
>>510
Perl や Ruby なら x オプション。
512510sage2006/04/25(火) 02:28:27
>>511
ありがとです
513デフォルトの名無しさんsage2006/04/27(木) 09:14:18
対応する括弧の位置を探す場合はどんな感じにすればよいんでしょうか。
514デフォルトの名無しさんsage2006/04/27(木) 09:23:17
正規表現で探す意味があるのか?
515デフォルトの名無しさんsage2006/04/27(木) 09:55:15
ないね。
516デフォルトの名無しさんsage2006/04/27(木) 10:34:55
任意深さにネストした括弧を正規表現で扱えないのは有名だが(有限状態
オートマトンと透過なので、カッコの数を無限に保持することができないって
例の奴)、ある有限の深さまでの正規表現は作れるので、文字列が与えられ
てから、深さ=文字列長/2までの正規表現を機械的に生成してマッチさせれば
できるよ。
517デフォルトの名無しさんsage2006/04/27(木) 23:33:29
セロ、という文字列を見つけたいが、オセロ、は無視したいので、
次のように書いてみたのですがだめでした。

[^オ]セロ

どう書けばよいか教えてください ( ´・ω・`)
518デフォルトの名無しさんsage2006/04/27(木) 23:36:15
use utf8;
ソースもUTF-8で書く
読み込むデータもUTF-8に統一
519デフォルトの名無しさんsage2006/04/27(木) 23:37:19
Perlスレと間違えたぴょん
520デフォルトの名無しさんsage2006/04/28(金) 00:46:15
Rubyなら、・・・まあどうでもいいか
521デフォルトの名無しさんsage2006/04/29(土) 00:42:33
>>517です
教えてくれる人いたらよろしくお願いします!
522デフォルトの名無しさんsage2006/04/29(土) 01:10:35
[^オ](セロ)
これでセロがマッチした位置を取得すればいいんじゃないの?
523デフォルトの名無しさんsage2006/04/29(土) 01:38:17
>>522 ありがとうございます!
524デフォルトの名無しさんsage2006/04/29(土) 02:07:19
これはどう?
/(?
525デフォルトの名無しさんsage2006/04/29(土) 03:13:21
>>524 自分のソフトではその検索式ではいずれにもマッチしませんでした。
何に準拠した正規表現なのかマニュアルに記載がないんでわかりません。
526デフォルトの名無しさんsage2006/04/29(土) 04:18:35
どうダメだったか書いてない時点で釣りだろ。
527デフォルトの名無しさんsage2006/04/29(土) 06:31:03
「いずれにもマッチしない」で、マッチしてほしいケースでマッチしないって
十分わかるじゃん。>>525

perlでって前提がついてないのに、説明梨に突然perlの正規表現持ち出すってのは
どうよ。>>524 一言「Perl限定でよければ」と添えればまだモメないものをさー。
528デフォルトの名無しさんsage2006/04/29(土) 13:35:48
本来は環境(ソフト名でも)を言わない質問者を責めるべきだろう
529デフォルトの名無しさんsage2006/04/29(土) 13:40:36
プログラミングに関するソフトではなかったのであえて名前は出しませんでした。
だって2ちゃんねるブラウザなんだもの。ごめんね。
530デフォルトの名無しさんsage2006/04/30(日) 09:38:26
HTMLをパースしてul要素の中のli要素の配列を作りたいんですが…

というソースから
"aaa¥nAAA","bbb¥nBBB"
という配列を取得するにはどのように書いたら良いですか?
環境はJavascriptです。
531デフォルトの名無しさんsage2006/04/30(日) 09:59:35
あ、できた

"".match(/
  • .*¥n.*<¥/li>/mg)

    と思ったら改行2個の時にダメだorz
    お。これなら?

    "
      ¥n
    • aaa¥nAA¥nA
    • ¥n
    • bbb¥nBBB
    • ¥n
    ".match(/
  • (.|¥n)*<¥/li>/mg)

    終了タグが2個目のしかマッチしないやorz むー
  • 532デフォルトの名無しさんsage2006/04/30(日) 10:50:50
  • ((.|¥n)*?)
  • 533デフォルトの名無しさんsage2006/04/30(日) 11:44:11
    >532
    お、おおお。量指定子の直後に?を置くと最小マッチになるんか…知らんかった、どうも有り難う!
    534デフォルトの名無しさんsage2006/04/30(日) 20:32:54
    / と / に囲まれた正規表現にマッチする正規表現が思い付かない…
    535デフォルトの名無しさんsage2006/04/30(日) 22:03:05
    >>534
    カッコのネストがあるから普通の正規表現では不可能

    perlの(?{ code })のような飛び道具を使えばなんとか
    なるかもしれないが、そこまでしたら正規表現でできた
    とは言わないと思う。
    536デフォルトの名無しさん2006/05/01(月) 21:59:10
    >>534-535
    /¥/.+?¥//でええんでないの?
    537デフォルトの名無しさんsage2006/05/02(火) 00:52:49
    m|pattern|
    538デフォルトの名無しさんsage2006/05/02(火) 01:26:27
    わざわざ「正規表現に」といって悩んでるからには正規表現として
    正しいもののみ受理するようなのをを期待してるんじゃないか?
    2つの/にはさまれた文字列でよけりゃさすがに悩まないだろ。
    真意は534にきいてみないとわからんがな。
    539536sage2006/05/02(火) 19:55:19
    >>534
    /と/に挟まれた文字列以外の何にマッチさせたいんじゃ。
    ネスト何とか言っとるが、全部数えて複数個なら一番下の階層から
    処理していけばいいんじゃねえ?奇数なら最初から数えてやるか
    最後から数えてやるか定義しなきゃ、答えのねえ問いじゃねえか。
    540デフォルトの名無しさんsage2006/05/02(火) 20:36:05
    ¥/ や ¥¥/ は?
    541デフォルトの名無しさんsage2006/05/03(水) 00:09:23
    最近話題の正規表現の一部
    について質問です

    var m = uri.match(/https?:¥/¥/[^¥/]*amazon¥.co¥.jp¥/.*ASIN¥/(¥w{10})([¥/&].*|)$/);

    上記はjavascriptのソースの一部なんですが、
    正規表現部分の最後の
    ([¥/&].*|)$
    が意味わかりません
    | は何のためにあるんでしょうか?

    | って選択演算子だったと思うのですが

    | の右側に何もないので選択できないと思うのですが、

    これは[¥/&.*]があればそれを、なければ何も選択しないという意味でしょうか?

    あと[¥/&]についてなんですが
    これは
    ¥か/か&のうちどれかという意味であっていますか?
    それとも¥はエスケープシーケンスで
    /か&のどちらかという意味でしょうか?
    542デフォルトの名無しさんsage2006/05/03(水) 01:16:22
    >>541
    [¥/&]は「/ もしくは &」という意味。
    手元のブラウザWinIE6ではエスケープしてもしなくてもスラッシュそのものとして扱われたけど
    ひょっとしたら何かのブラウザがデリミタと誤認しないようにしてるのかも。
    キャラクタクラス内でも ¥] を使えるように、普通エスケープは効くよ。
    で、(pattern|)という構文は(pattern)? とほぼ同じ。
    543デフォルトの名無しさんsage2006/05/03(水) 08:34:32
    ありがとうございます
    よくわかりました
    544デフォルトの名無しさん2006/05/03(水) 15:06:34
    this
    is a pen.

    this(半角スペースを入れたい)
    is a pen.

    テキスト中の文字を改行で挟む場合に
    半角スペースを挿入したいのですが、
    桜エディタ等での置換の正規表現はどのようになりますか
    545デフォルトの名無しさんsage2006/05/03(水) 18:15:11
    マッチ部分が変数として使えないと無理だよぉ。
    546デフォルトの名無しさん2006/05/03(水) 19:15:54
    桜エディタでいろいろやってみましたら、
    [a-z]$
    と入力すると、検索には引っかかるんですが、置換ができません・・
    547デフォルトの名無しさんsage2006/05/03(水) 19:36:09
    一度全部の改行の前にスペースを入れてから
    ". "を "." に戻せばいいんだよぉ。
    548デフォルトの名無しさんsage2006/05/03(水) 19:37:55
    ". ¥n" を ".¥n" に だった
    549デフォルトの名無しさん2006/05/03(水) 22:44:28
    >>548
    ありがとうございました
    550デフォルトの名無しさんsage2006/05/04(木) 09:13:19
    たとえば、abcdefgという文字列があって、
    この中にbとcがちょうど1回ずつあるかどうかを調べるのは、
    正規表現で実現可能ですかね?
    551デフォルトの名無しさんsage2006/05/04(木) 11:23:20
    if ((/.*b?[^b]*/) && (/.*c?[^c]*/)) {
    # bとcがちょうど1回ずつある
    }
    552デフォルトの名無しさんsage2006/05/04(木) 11:25:59
    あっダメだわ
    553デフォルトの名無しさんsage2006/05/04(木) 11:27:27
    $入れればいいのか
    554デフォルトの名無しさんsage2006/05/04(木) 14:58:00
    ^
     [^cb]*
      (c[^cb]*b|
       b[^cb]*c)
     [^cb]*
    $
    だろ?
    555550sage2006/05/04(木) 19:19:10
    なるほど、そんな感じでやればいいんですね。ありがとうございました。
    556デフォルトの名無しさん2006/05/05(金) 07:07:45
    >>540
    > ¥/ や ¥¥/ は?
    ¥/はありえそうにない文字(例えば@)に置き換えときゃいいじゃん。
    ¥¥は別のありえそうにない文字(例えば#)に置き換える。
    エスケープ文字なんてそう多くないんだから実用上これで問題ないんじゃ?
    557デフォルトの名無しさんsage2006/05/06(土) 20:07:20
    英字・数字・記号
    3種類のうち2種類が含まれているかを判定する正規表現って可能ですか?
    例)
    abcde ×
    ab123 ○
    12344 ×
    1!1#1 ○
    558デフォルトの名無しさんsage2006/05/06(土) 20:41:55
    2種類以上なら…
      ^([a-z]*|[0-9]*|[記号]*)$ の否定を取るだけでいいかな
      あとは[a-z][0-9]といった途中で文字種が変化するパターンを1個見つければいいとかさ

    2種類だけだと…
      ^([a-z0-9]*|[a-z記号]*|[0-9記号]*)$ こうするしかないかな?
    559デフォルトの名無しさんsage2006/05/06(土) 20:44:06
    その3種類から2種類とりだした順列を全部並べればいい。

    a.*1|1.*a|a.*!|!.*a|1.*!|!.*1

    a,1,!はそれぞれ適切な文字クラスに置き換えてくれ。
    560デフォルトの名無しさんsage 某汁の人2006/05/07(日) 00:26:22
    >>557
    3種類のうち必ず2種類という条件なら
    ^([a-z0-9]*[a-z][0-9][a-z0-9]*|[a-z0-9]*[0-9][a-z][a-z0-9]*|[a-z記号]*[a-z][記号][a-z記号]*|[a-z記号]*[記号][a-z][a-z記号]*|[0-9記号]*[0-9][記号][0-9記号]*|[0-9記号]*[記号][0-9][0-9記号]*)$

    う〜ん長すぎて気持ち悪いナァ
    561558sage2006/05/07(日) 01:25:15
    あ、俺が>>558下段で書いてたのは「2種類以下」だった。勘違いスマソ。

    >>560
    ^((a+b|b+a)[ab]*|(b+c|c+b)[bc]*|(a+c|c+a)[ac]*)$
    の形を適用すれば半分くらいになりそう

    ¥1¥2を駆使すれば更に短くなりそうだけど思いつかなかった。
    562デフォルトの名無しさん2006/05/11(木) 17:22:08
    【】←カッコ内をヒットさせたい時に【.*】とすると
    下のように1行に2ペア以上があるとカッコ以外の部分までヒットしてしまう…
    【正規表現】分からなくてスミマセン【秀丸】

    これを解決するには最初の】←カッコ閉じを指定すればいいと思うんですが
    どうすれば良いのでしょうか?
    563デフォルトの名無しさんsage2006/05/11(木) 17:36:10
    勉強し始めたばかりの俺様が来ましたよ(つД`)


    >>562

    【.*?】
    で、可能ではないかしら・・・
    564デフォルトの名無しさんsage2006/05/11(木) 17:50:38
    >>562
    どの正規表現実装を使うのか書きなさいな。

    【[^】]*】
    565デフォルトの名無しさんsage2006/05/11(木) 17:51:46
    >>563
    ありがとー!バッチリできましたよ。
    566562=565sage2006/05/11(木) 17:56:12
    >>564正規表現実装?
    まだそこまで分かりませんですOTZ スマソ…
    567デフォルトの名無しさんsage2006/05/11(木) 18:17:51
    只単純に、あんたが使っている「正規表現を解釈しているプログラム」が何か聞いているだけだと思うぞ。
    568デフォルトの名無しさんsage2006/05/11(木) 18:47:52
    >>567
    秀丸じゃないの?
    569567sage2006/05/11(木) 18:50:58
    >>568
    漏れに聞かれても知らん。
    570デフォルトの名無しさんsage2006/05/11(木) 22:02:47
    >>569
    そうだが、質問文見る限り秀丸じゃない?っていおうとしたら>>564なのね…orz
    571・∀・)っ-○◎● ◆toBASh.... 2006/05/12(金) 06:58:41
    自分のプログラムでおかしな動作になる鬼車のソース読んだ
    愕然とした
    onig_searchでregex_tの構造体の中身操作してる。

    これ全然スレッドセーフじゃねーじゃん

    正規表現オブジェクトのコピーをする関数が見つからない
    ソース文字列分だけコンパイルすればええんかアレ
    572デフォルトの名無しさんsage2006/05/12(金) 10:47:09
    >>571
    作者に報告 or patch の contribute よろ。
    573デフォルトの名無しさんsage2006/05/12(金) 10:53:55
    というか、ドキュメントもソースも読んでないので憶測なんだけど、
    同じ regex_t を別々のスレッドから利用するのはそもそも間違いなんでは?
    普通の正規表現ライブラリはそれでも問題なく動くの?
    POSIX regex で regerror なんかいかにも問題ありそうだけど。
    574・∀・)っ-○◎● ◆toBASh.... 2006/05/13(土) 08:09:07
    少なくともboost regex++の正規表現オブジェクトはスレッドセーフ
    C++ラッパークラス作ろうとして困っている。
    575・∀・)っ-○◎● ◆toBASh.... 2006/05/13(土) 08:17:29
    Boost Regex++はリージョンオブジェクトさえ別々なら正規表現オブジェクトは複数スレッドで
    共有していい仕様になってた希ガス

    extern int
    onig_search(regex_t* reg, UChar* str, UChar* end,
    UChar* start, UChar* range, OnigRegion* region, OnigOptionType option)
    {
    int r;
    UChar *s, *prev;
    MatchArg msa;

    if (ONIG_STATE(reg) == ONIG_STATE_NORMAL) {
    reg->state++; /* increment as search counter */
    if (IS_NOT_NULL(reg->chain)) {
    onig_chain_reduce(reg);
    reg->state++;
    }
    }
    (以下略)

    最初の数行だけで明らかにヤバイっしょ。
    排他ロックかけるか、パターンのコピーをとらなきゃいけないんだが、
    前者はやりたくないし、後者はパターンのコピーをする関数が見つからない。

    実はC++ラッパー作ろうとしてるんだけど、コピーをどうやって実装しようか
    悩んでいる。

    クラスオブジェクトに元の文字列を含めておいて、コピーコンストラクタで文字列をコピーする形にして
    その都度onig_newって手もあるんだけど、それって結構ダサい実装じゃね。
    576デフォルトの名無しさんsage2006/05/13(土) 12:36:05
    >>575
    >クラスオブジェクトに元の文字列を含めておいて、コピーコンストラクタで文字列をコピーする形にして
    >その都度onig_newって手もあるんだけど、それって結構ダサい実装じゃね。

    こうやってるC++ラッパ見た事あるよ
    577デフォルトの名無しさんsage2006/05/13(土) 13:53:31
    掲示板の投稿規制をしたいので教えてください。
    例えば「セクース」という言葉が含まれている場合は排除したいのですが
    ○セクースなどと言うセクースとは全く関係ない言葉があったとしてそれまで排除したくなのです。
    ○のところがひらがなや漢字アルファベットなどでカタカナ以外だった場合は「セクース」という単語がマッチするものとしてくれればいいです。

    要するに単語の先頭からセクースというカタカナで始まる場合は排除して
    セクースのセの前がカタカナだった場合は該当しないとしたいのです。
    セクースマシンガンズやセクースピストルズ、セクースフレンドなどは排除してもかまいません。
    出来ますかね?
    578酩酊 ◆TWARamEjuA sage2006/05/13(土) 14:35:44 ?#
    一生懸命頑張れば出来ます。
    579デフォルトの名無しさんsage2006/05/13(土) 16:43:17
    殆ど無意味だがな。
    まぁ、無駄な鼬ごっこはできるが。
    580デフォルトの名無しさんsage2006/05/13(土) 16:45:53
    >>577
    マルチバイトかワイド文字対応の正規表現使うなら
    [^ア-ン]セクース
    581デフォルトの名無しさんsage2006/05/13(土) 23:00:27
    スタティックリンクしてもうるさいこといわないライセンスのライブラリ無いですか?
    (表示義務も無い奴がベスト)
    582デフォルトの名無しさんsage2006/05/14(日) 03:36:09
    そんなライブラリは無い
    583デフォルトの名無しさんsage2006/05/14(日) 05:19:28
    どんくらいのライセンスまでおkなの?BSD?MPL?
    584デフォルトの名無しさんsage2006/05/14(日) 07:32:10
    ソースやオブジェクトの公開義務が無いってのがぎりぎりっす。
    585デフォルトの名無しさんsage2006/05/14(日) 09:22:18
    自分のサル知恵じゃ作れないからって
    他人の作ったライブラリをあたかも自分で作ったかのように振る舞おうとしてんじゃねぇよ。
    素人が見りゃどんなライブラリ使っていても
    このソフトスゲー=作者スゲー≠このライブラリスゲー
    の認識しか持たないからいちいち小さいことで自分のプライドが傷つくとか思ってんじゃねぇよ。
    586デフォルトの名無しさんsage2006/05/14(日) 10:28:01
    簡単な正規表現ライブラリぐらい3日もあれば作れるだろ。
    587デフォルトの名無しさんsage2006/05/14(日) 11:41:24
    いいのがいっぱいあるんだからわざわざ作るこたないじゃん。
    その3日が無駄だよ。
    588デフォルトの名無しさんsage2006/05/14(日) 14:26:55
    ここで質問してマトモなレスが返ってくるのを待ってる時間の方が無駄だよ。
    589デフォルトの名無しさん2006/05/14(日) 23:38:17
    メールアドレスのみを抽出する正規表現はありますかね。
    590デフォルトの名無しさんsage2006/05/14(日) 23:44:28
    >>589
    有名な話だが、validなメールアドレスを正確に正規表現で表すことは出来ない。
    591デフォルトの名無しさんsage2006/05/14(日) 23:51:57
    マジっすか。役に立ちませんね。
    592デフォルトの名無しさんsage2006/05/14(日) 23:53:03
    あとくされが無いなら、有料のライブラリでもいいんですけど。
    お勧めないですか?
    593デフォルトの名無しさんsage2006/05/15(月) 00:08:45
    PCRE か Oniguruma か ICU かそのへんでいいんじゃね?
    594デフォルトの名無しさんsage2006/05/15(月) 00:38:44
    boostにもregex++とxpressiveが。
    サイズふくらむけど。
    595デフォルトの名無しさんsage2006/05/15(月) 12:25:06
    >メールアドレスのみを抽出
    spam業者
    596デフォルトの名無しさんsage2006/05/16(火) 00:27:37
    >>595まあまあ、ズバリ言ってやるなよ。
    >>589よ、これを使いなさい。
    つ「.+@.+」
    597デフォルトの名無しさんsage2006/05/16(火) 01:44:09
    >596
    輝く石ころですか?
    598デフォルトの名無しさんsage2006/05/16(火) 09:03:55
    Perlの小技かなんかに長いのがあったような・・・
    599デフォルトの名無しさんsage2006/05/16(火) 09:35:44
    >>598
    あれでも制限付きな例だし、
    そもそもここで正規表現使うべきじゃないよっていう反例的な意味合いが強い気がする。
    600デフォルトの名無しさんsage2006/05/16(火) 09:39:01
    あ、それで、メールアドレスのマッチは、
    真面目にやるならパーサを使うべきだし、
    そこまで必要でないのであれば、ある程度妥協しつつ、
    ケースによってパターンを使い分けるのが良いと思う。

    場合によっては >>596 でも良い場合もあるでしょう。
    601デフォルトの名無しさんsage2006/05/17(水) 12:11:30
    " @ " でもマッチしちゃうと思うんですが。
    602デフォルトの名無しさんsage2006/05/17(水) 12:25:46
    いや、だから「場合によっては」って言っています。


    と思ったけど、さすがに「.+@.+」は無い罠・・・
    603デフォルトの名無しさんsage2006/05/17(水) 12:33:27
    以前、「?」を含むメールアドレスを使ってたけど、中途半端なチェッ
    クをするウェブアプリケーションで「メールアドレスが不正」とか怒ら
    れることがあって遺憾でした。
    604デフォルトの名無しさんsage2006/05/17(水) 12:40:16
    VBとかで変数名にマルチバイト文字を使う奴と同じ香りがする
    605デフォルトの名無しさんsage2006/05/17(水) 13:57:12
    「?」を含むメールアドレスを使っているユーザがいて遺憾です。
    606デフォルトの名無しさんsage2006/05/17(水) 14:01:35
    それはいかんな。
    607デフォルトの名無しさんsage2006/05/17(水) 14:21:41
    ふつう使わないパターン( "foo"@domain とか)を除けば、
    [-¥w!#$%&'*+/=?^_`{|}‾]+(¥.[-¥w!#$%&'*+/=?^_`{|}‾]+)*@[-¥w]+(¥.[-¥w]+)+
    こんぐらいでいいかんじかね。

    参考: RFC 2822
    608デフォルトの名無しさんsage2006/05/17(水) 15:04:14
    もし 1980年 (RFC 821 & RFC 822 以前) に Perl が現在くらい普及していたならば、
    メールアドレスも BNF じゃなくて正規表現で定義されていたのでないかと妄想中。
    609デフォルトの名無しさんsage2006/05/17(水) 23:54:36

    つ正規表現→字句文法
    610デフォルトの名無しさんsage2006/05/18(木) 10:36:26
    時代的に多バイト文字を使ってもそろそろ許されると思うんだがな
    611デフォルトの名無しさんsage2006/05/18(木) 23:14:53
    >>610
    使うってどこに?
    612デフォルトの名無しさんsage2006/05/18(木) 23:26:58
    流れ的にメールアドレス内だろうか
    正規表現ではマルチバイト文字を認識するのあるし
    613デフォルトの名無しさん2006/05/21(日) 17:14:26
    正規表現の勉強するのにこれはいいっていう本はありますか?
    614デフォルトの名無しさん2006/05/21(日) 17:39:18
    わざわざ本買って勉強するほどのものでもないような。
    615デフォルトの名無しさん2006/05/21(日) 17:44:59
    /¥{LOG¥}[¥w¥W]+?¥{¥/LOG¥}/

    すみません、これってどういう意味なのでしょうか?
    ¥w¥Wが突然出てきてわかりません。
    お願いします
    616デフォルトの名無しさんsage2006/05/21(日) 17:54:11
    >>615
    変な正規表現…。
    [¥w¥W] で「全ての文字」ってやりたいだけ。. でも良いのにね。
    617デフォルトの名無しさんsage2006/05/21(日) 17:55:50
    >>616
    おおっ、なるほど!!
    即レスありがとうございました、助かりました(_ _)
    618デフォルトの名無しさんsage2006/05/21(日) 17:56:45
    >>616
    改行を含めたいからとか。俺もよく [¥S¥s] とかやる。
    619デフォルトの名無しさんsage2006/05/21(日) 19:37:21
    普通 (?s:) か /s じゃないの?
    620デフォルトの名無しさんsage2006/05/23(火) 01:48:06
    **さいたま
    ぬおおおおおお!!

    :とやまー|富山?
    621デフォルトの名無しさんsage2006/05/23(火) 17:50:23
    (V)o¥o(V)って何にマッチするの?
    622デフォルトの名無しさんsage2006/05/23(火) 17:54:45
    VooV
    623デフォルトの名無しさんsage2006/05/24(水) 16:23:37
    正規表現について勉強しているのですが、>>620のような文字列で、先頭に何も記号が無い文字列('ぬおおおおおお!!')
    をマッチさせるにはどうすればよいのでしょうか?

    6246232006/05/24(水) 16:25:17
    記号というのは、>>620の '*'や ':' のことです。
    625デフォルトの名無しさんsage2006/05/24(水) 18:51:08
    ^
    6266232006/05/24(水) 22:56:56
    >>625
    thx!!
    なるほどね... ^[^¥*:]
    627デフォルトの名無しさんsage2006/05/25(木) 08:10:10
    (*^-^*)/
    628デフォルトの名無しさん2006/05/25(木) 18:21:40
    http://www.restspace.jp/cgi-bin/orz/img-box/img1741.png

    こういうUIで全角数字を半角数字に置換しようとしたら
    上下2つのテキストフィールドにどう書き込んだらいいと思いますか

    お願いします
    629デフォルトの名無しさんsage2006/05/25(木) 18:32:50
    >>1-
    630デフォルトの名無しさんsage2006/05/27(土) 11:38:43
    >>627
    ¥(*¥^-¥^*¥)/
    631デフォルトの名無しさんsage2006/05/27(土) 16:30:01
    [a−zA−Z0−9]
    [a-zA-Z0-9]
    632T女の竹田sage2006/05/29(月) 14:31:31
    >>628
    正規表現じゃ大文字小文字変換は無理だよ。
    633T女の竹田sage2006/05/29(月) 14:32:12
    間違えた
    全角半角変換
    634デフォルトの名無しさんsage2006/05/29(月) 16:13:09
    >>632-633
    文字コードによる
    出来るのもある
    635T女の竹田sage2006/05/29(月) 16:22:52
    >>634
    いや、Perlのtrは正規表現じゃないよね。
    例えば>>628さんの状況だと、文字コードにかかわらず無理じゃないかな。
    数字だけなら10回やったらできるけど。
    636デフォルトの名無しさんsage2006/05/29(月) 17:03:30
    use Encodeしたらできるんじゃない?
    試してないけどさ
    637デフォルトの名無しさんsage2006/05/29(月) 19:20:40
    ていうか >>635 の「Perlのtrは正規表現じゃないよね」という意味では
    「正規表現では無理」なんじゃないの?

    use Encode だとするとどうやるの?
    638デフォルトの名無しさんsage2006/05/29(月) 19:38:57
    s/a/a/g;
    :
    s/z/z/g;
    s/A/A/g;
    :
    s/Z/Z/g;
    s/0/0/g;
    :
    s/9/9/g;

    って全文字繰り返せば「正規表現でもできる」よ。
    639デフォルトの名無しさんsage2006/05/29(月) 19:55:03
    >>638
    単一のs/.../自体は正規表現といっていいだろうけどさ。
    でもsコマンドの列全体となると、自明に一個の独立した正規表現じゃなく、
    sコマンド(のみ)を使ったプログラムというしかないだろ。
    640デフォルトの名無しさんsage2006/05/29(月) 20:01:02
    半角->全角方向なら
    s/[0-9]/¥x1B¥$B¥x23$1¥x1B(B/g
    とかで出来ないか?
    641デフォルトの名無しさんsage2006/05/29(月) 22:48:05
    設問を勝手に変えるなよ
    642デフォルトの名無しさん2006/05/31(水) 18:19:10
    ここでいいのかな。

    $hoge = "hehehehe";

    hoge($hoge);

    /*
    何かをする関数
    */
    function hoge() {
    }

    みたいになっている場合、/* 〜 */ を削除したいのだが、正規表現で
    どう消したらいいのか教えていただけないでしょうか。

    お願いします。
    643デフォルトの名無しさんsage2006/05/31(水) 18:34:51
    >>642
    s| /¥* .*? ¥*/ ||gsx
    644デフォルトの名無しさん2006/06/01(木) 15:45:57
    質問させてください。
    perl で全角文字の二バイト目が正規表現の特殊文字になってるとき

    ¥x81^



    ¥x81¥^

    とかに置換したいんです。(¥)を付加したい

    上記の場合は s/¥x81¥^/¥x81¥¥¥^/g;

    で済むと思うのですが、一バイト目の範囲が結構広いので、
    なんかうまく書く方法無いでしょうか?

    お願い致します。

    645デフォルトの名無しさんsage2006/06/01(木) 15:48:15
    >>644
    sjis使うのをやめる
    646デフォルトの名無しさんsage2006/06/01(木) 15:54:43
    >>644
    use encoding 'Shift_JIS';
    をやっておいたらどうか?
    647デフォルトの名無しさん2006/06/03(土) 01:11:31
    1.
    --- (0.00%)
    2.
    -155 (-5.39%)
    3.
    -2000 (-4.22%)

    文中から1.と2.と3.のパターンをマッチさせたいのですが、どんな正規表現を用いたらいいのですか?
    648デフォルトの名無しさんsage2006/06/03(土) 01:54:19

    .*¥(¥d¥.¥d¥d%¥).*
    649デフォルトの名無しさん2006/06/03(土) 10:18:21
    >>648
    なんか違わない
    650デフォルトの名無しさんsage2006/06/03(土) 10:48:02
    >>649=647
    「しないと思う」 じゃなくて 「しなかった」 だろ。
    だって問題は
    ほらよ

    .*¥(-?¥d¥.¥d¥d%¥).*
    651デフォルトの名無しさんsage2006/06/03(土) 10:55:56
    >>649
    12.53%とかはないのかな?
    652デフォルトの名無しさんsage2006/06/03(土) 12:45:53

    .*?
    653デフォルトの名無しさんsage2006/06/03(土) 15:31:34
    perlの正規表現では
    /abc|def|ghi/
    よりも
    /abc/ || /def/ || /ghi/
    の方が効率的だそうですが
    何故ですか?
    どちらも同じ効率のように見えるのですが
    654デフォルトの名無しさんsage2006/06/03(土) 16:01:20
    >>653
    後者は正規表現として扱う必要がないからindexとかstrpos的な処理に最適化される
    655デフォルトの名無しさんsage2006/06/03(土) 21:56:35
    $str='((I)(have (two) (children)))';なんていうのを
    [[I 1][have [[two 2][children 3]4]5]
    みたいにしたいのだけどどうすればいいですか。つまり、
    内側の括弧から順番にまた左から右に順番に番号を振っていきたい。
    while($str =‾ s/¥(.*?¥)/"[$1 " . ++$num . "]"/eg) {1;}
    こうやってもだめですた。
    656655sage2006/06/03(土) 22:06:09
    まちがえた。
    $str='((I)(have ((two) (children)))';だた。
    657デフォルトの名無しさんsage2006/06/04(日) 00:02:04
    >>655
    1 while $str =‾ s/¥(([^(]*?)¥)/"[$1 ".++$num."]"/ge;

    ちなみにここはPerlに限ったスレじゃないからな
    658デフォルトの名無しさんsage2006/06/04(日) 00:26:46
    ^apnic¥|JP¥|ipv4¥|.*allocated$で、
    JP以外を捕まえたい場合は、どう記述すれば良いのでしょうか?
    ^apnic¥|[^J][^P]¥|ipv4¥|.*allocated$だとAPが引っかかるし…
    ^apnic¥|(^JP)¥|ipv4¥|.*allocated$だと駄目だし(´・ω・`)
    659デフォルトの名無しさんsage2006/06/04(日) 01:02:09
    >>658
    ( | | 内が)「JP以外」ってのは
    1文字と3文字以上の時はそのままマッチして、
    2文字の時だけ「Jで始まらないか、Jで始まってPで終わらないもの」
    と言い換えられる。
    ^apnic¥|([^¥|]|[^¥|][^¥|][^¥|]+|[^J]|J[^P])¥|ipv4¥|.*allocated$

    環境によっては
    ^apnic¥|(?!JP¥|).*?¥|ipv4¥|.*allocated$
    が使える。

    ざっと確認したけど間違ってるかも。
    6606552006/06/04(日) 01:34:25
    >>657
    偉そうな口調ですが、あなたのでやるとこうなります。
    ([I 1][have [[two 2] [children 3] 4] 5]
    最初のが変換されてませんね。
    それとあなたのと私のではどこが違うのでしょうか。
    .*?=最短マッチだから。
    661655sage2006/06/04(日) 03:03:12
    ごめんなさい。元データが間違ってますた。閉じの括弧が一つ足りなかったORZ
    6626532006/06/04(日) 09:00:22
    >>654
    なるほど!そういうことでしたか
    最適化ってこれのことだったのですね。ありがとうございました。
    663658sage2006/06/04(日) 10:02:29
    >659
    レスどうもです。
    その二つは動かなかったけど突破口が見えました(`・ω・´)
    664デフォルトの名無しさんsage2006/06/04(日) 13:33:53
    sedとawkとPerlとJavaScriptとC#を使用しているのですが、
    各々微妙に正規表現に使えるメタキャラクタが違って萎えます。

    「もういい加減統一した方がいいんじゃね?」
    みたいな動きは無いんでしょうか
    665デフォルトの名無しさんsage2006/06/04(日) 15:48:38
    ありません
    666デフォルトの名無しさんsage2006/06/04(日) 18:46:16
    連続した改行の個数を1つ減らす、ていうのは正規表現で可能でしょうか。
    例: 'まんこ¥n¥nなめなめ¥nまんこ¥n¥n¥nなめなめ' → 'まんこ¥nなめなめまんこ¥n¥nなめなめ'
    Firefox 1.5.0.4 の JavaScript 上での利用を考えています。
    667デフォルトの名無しさんsage2006/06/04(日) 19:55:48
    js/¥n(¥n*)/$1/g

    javascriptではどう書くのかしらんが。
    668デフォルトの名無しさんsage2006/06/04(日) 19:56:44
    すまん、なんか変な場所にjが残った...
    669デフォルトの名無しさんsage2006/06/04(日) 20:11:20
    >>667-668
    無事動きました。ありがとうございます。
    javascript:alert('まんこ¥n¥nなめなめ¥nまんこ¥n¥n¥nなめなめ'.replace(/¥n(¥n*)/g, '$1'));
    670デフォルトの名無しさんsage2006/06/04(日) 20:19:30
    どうでもいいけどサンプル文字列にはもう少し誰に見せても恥ずかしくない単語を選ぼうよ。
    671デフォルトの名無しさんsage2006/06/04(日) 20:35:50
    さすがはセイキ表現だな
    672デフォルトの名無しさんsage2006/06/04(日) 22:12:03
    聖域?
    673デフォルトの名無しさんsage2006/06/04(日) 22:22:12
    二十世紀梨
    674デフォルトの名無しさんsage2006/06/05(月) 11:31:22
    1234567を1,234,567に一発で置換できる正規表現ってないよね。
    s/([0-9]{3})*/$1,/g でだめでした。
    675デフォルトの名無しさんsage2006/06/05(月) 11:37:03
    s/([0-9]{3})/$1,/gもだめだぁ・・・
    676デフォルトの名無しさんsage2006/06/05(月) 12:54:43
    後ろから3個だからその方法じゃだめだと思うよ
    677デフォルトの名無しさんsage2006/06/05(月) 12:57:03
    s/(.*¥d)(¥d¥d¥d)/$1,$2/g
    678デフォルトの名無しさんsage2006/06/05(月) 12:58:26
    s/(¥d)(¥d{3})($|¥D)/¥1,¥2¥3/
    679デフォルトの名無しさんsage2006/06/05(月) 12:59:08
    s/(¥d)(¥d{3})(?=¥D|$)/$1,$2/g
    680デフォルトの名無しさんsage2006/06/05(月) 12:59:46
    s/¥d+?(?=(?:¥d{3})+(?!¥d))/$&,/g
    681デフォルトの名無しさんsage2006/06/05(月) 13:33:09
    どれが正解?
    682デフォルトの名無しさんsage2006/06/05(月) 13:39:07
    実行してみて正しく動いたものが正解。
    683デフォルトの名無しさんsage2006/06/05(月) 15:03:26
    >>680
    $&をどういう意味なのでしょうか?
    ?:、?=はグルーピング除外はわかるのですが
    684デフォルトの名無しさんsage2006/06/05(月) 16:16:33
    >>683
    「正規表現」のところに書いてなかったら「特殊変数」のところに書いてあるかも。
    正規表現全体に合致した文字列。
    685デフォルトの名無しさんsage2006/06/05(月) 16:33:04
    >>680
    すごいね。何桁でもいけた。
    ?:がなくてもいけたけど、いるのかな?
    686デフォルトの名無しさんsage2006/06/05(月) 16:53:03
    >>684
    正規表現全体に合致した文字列とは、グルーピングは関係なんですよね?
    最初の¥d+?に括弧がないから・・・。「,」がつくタイミングがいまいちよくわかりません。
    正規表現全体ということは、¥d+?と(?:¥d{3})+が対象になるのでしょうか?
    うーん・・・難しい。
    687685sage2006/06/05(月) 18:32:39
    >>686
    これ↓でもいけたよ。
    見やすくなってない?

    s/¥d+?(?=(¥d{3})+¥D)/$&,/g
    688デフォルトの名無しさんsage2006/06/05(月) 18:49:26
    >>687
    ちゃんとテストしような。
    689デフォルトの名無しさんsage2006/06/05(月) 21:05:52
    >>688
    あっ、失礼。
    数字以外もある文字列だけで試してた。
    690デフォルトの名無しさんsage2006/06/05(月) 22:30:03
    文字列yyを含まない  という指定はどうしたらいいでしょうか。
    [^yy] は文字集合だったのね…
    691デフォルトの名無しさんsage2006/06/05(月) 22:40:38
    [^y]+
    692デフォルトの名無しさんsage2006/06/05(月) 22:41:27
    [^y]{2,2}
    693690sage2006/06/06(火) 01:12:04
    >>691-692
    ありがとうございます。
    XYZ の並び文字列を含まない  というケースではどうなるでしょうか?
    694デフォルトの名無しさんsage2006/06/06(火) 03:11:17
    Pattern pattern = Pattern.compile(",", Pattern.DOTALL);
    Matcher matcher = pattern.matcher(">10,555");
    String string = matcher.replaceAll("");
    System.out.println(string);

    /*>10555 */
    *************************************************************
    Pattern pattern = Pattern.compile("(.*)");
    Matcher matcher = pattern.matcher(">10,555");
    if(matcher.find())
    System.out.println(matcher.group(1));

    /*10,555*/
    ***************************************************************
    上はカンマを除去します
    下はで囲まれた部分を抽出します

    これ2つをくっつけて10555とプリントしたいんですがうまくいきません
    どう書いたらいいでしょうか
    695デフォルトの名無しさんsage2006/06/06(火) 22:37:32
    なんとなく正規表現プログラミングFAQサイトを作ってみたのだが

    http://capslockabcjp.kitunebi.com/faq.html
    696デフォルトの名無しさん2006/06/06(火) 23:08:03
    VBでいずれか(A or B)のパターンにマッチさせる場合
    (A|B)でOK?

    Perlとかだと真ん中切れてる棒なんだけどそれらしきやつがないんですよ
    697デフォルトの名無しさんsage2006/06/06(火) 23:20:19
    それは単にフォントの問題だから気にしないでOK
    (文字コードによっては区別されるかもしれないが)
    698696sage2006/06/07(水) 01:33:07
    >>697
    thx。うまくいきました
    699デフォルトの名無しさんsage2006/06/07(水) 02:28:18
    >>695
    みた。
    いきなりで Traditional NFAとPOSIX NFAの動作の違いの説明というのには
    面食らったけど、これから内容が充実していくのを期待するっす。

    ところで、(フリーソフトウェアの)mawkもPOSIX NFAタイプのエンジンを
    使っていたような。他にはあるかな?
    700デフォルトの名無しさんsage2006/06/07(水) 02:31:50
    このスレで出てたmonnerもPOSIXだけどサイトがあぼん
    7016962006/06/07(水) 09:06:24
    正規表現をチェックできるソフトって何使ってるの?
    702デフォルトの名無しさんsage2006/06/07(水) 12:03:10
    エスパー降臨↓
    703デフォルトの名無しさんsage2006/06/07(水) 12:18:23
    その言語の unit testing framework を使ってひたすらゴリゴリテストを書く。
    704デフォルトの名無しさんsage2006/06/07(水) 12:28:00
    コスト監視機能付きの正規表現エンジンというのもいいかもしれない。
    705デフォルトの名無しさんsage2006/06/07(水) 12:39:38
    エンジンの仕事じゃねええ
    706デフォルトの名無しさんsage2006/06/07(水) 12:40:57
    文法チェックに関してはフロントエンドのエラー番号見るだけ。
    時間量に関しては入力の度にエンジン側の負荷を取れるようにすればチェックができる。
    開発してみっかな。
    707デフォルトの名無しさんsage2006/06/07(水) 13:39:14
    正規表現を書くと、そのパターンに適合する文字列が全て列挙表示されるプログラムが欲しい。
    708デフォルトの名無しさんsage2006/06/07(水) 13:43:20
    組み合わせの爆発的な増大。*を含むとほぼ無限ループ。
    709デフォルトの名無しさんsage2006/06/07(水) 14:07:12
    大丈夫、俺には無限の時間があるから。
    710デフォルトの名無しさんsage2006/06/07(水) 14:33:46
    >>709
    オマエにあってもサーバには無いんだよ
    711デフォルトの名無しさんsage2006/06/07(水) 18:51:09
    re-builder
    712デフォルトの名無しさんsage2006/06/07(水) 19:00:17
    リファレンス的に常備してる本を教えてください
    713デフォルトの名無しさんsage2006/06/07(水) 19:19:07
    正規表現のリファレンスは実装によるだろ
    正規表現の組み込み先の言語のリファレンスマニュアル読むのが一番

    正規表現とはそもなんぞやという意味でのリファレンスならオライリー本一択だろうな
    いくつかのメジャーな言語における実装による差異や細かい動作も載ってるぞ

    Amazon.co.jp:詳説 正規表現 第2版: 本

    高価で込み入った本なので半年単位で読み解くことを推奨

    薄いリファレンス本がないわけではないけどな
    Amazon.co.jp:正規表現デスクトップリファレンス: 本
    714デフォルトの名無しさんsage2006/06/07(水) 19:48:51
    あとはアルゴリズムの本を読んで
    一度でも自分で正規表現を実装すれば
    効率の良い正規表現とかも分かるだろうね。
    715デフォルトの名無しさんsage2006/06/07(水) 21:37:06
    x0, x1, x2, ......, x8, x9
    とかっていうのを正規表現で置換して
    x[0], x[1], x[2], ......., x[8], x[9]
    という風に置換したいのですがどうすればよいんでしょうか?

    検索だけなら
    /x[0-9]/
    でできることは分かっているのですが・・・
    716デフォルトの名無しさんsage2006/06/07(水) 21:42:30
    後方参照のしかたを調べろ
    717デフォルトの名無しさんsage2006/06/08(木) 10:00:10
    org.apache.commons.jxpath.ri.compiler.CoreOperationMod= {
    public org.apache.commons.jxpath.ri.compiler.Expression[] org.apache.commons.jxpath.ri.compiler.Operation.getArguments()
    }

    org.apache.commons.jxpath.ri.compiler.CoreOperationMod= {
    public Expression[] getArguments()
    }
    に変更するため、
    ^(?>:¥w+)(?:¥s+)¥¥w+¥.)+(?!¥w+=) を使用しましたがだめでした。
    アドバイスをお願いします・・・
    718デフォルトの名無しさんsage2006/06/08(木) 10:08:00
    717ですが、
    (¥w+¥.)+(?!¥w+=)だと、

    org.apache.commons.jxpath.ri.compiler.CoreOperationMod= {

    compiler.CoreOperationMod= { 
    になっちゃいます。

    (¥w+¥.)+で強欲マッチ? しているのいに、なんで「org」からが対象にならないのでしょうか?
    719デフォルトの名無しさんsage2006/06/08(木) 12:16:47
    ((¥w+¥.)+)=
    720デフォルトの名無しさんsage2006/06/08(木) 13:24:37
    718です。
    ((¥w+¥.)++)(?!¥w+=) で行けました。
    ん〜正規表現は奥が深い
    721デフォルトの名無しさんsage2006/06/08(木) 15:15:48
    後読み、先読みには、文字列の否定ができるのに、通常のグループ化ではなぜ否定ができないのだろうか・・・
    (? (?!regex) → ○
    (!regex) → ×
    722デフォルトの名無しさん2006/06/08(木) 15:36:58
    er又はelが文中につかない表現というのはできますでしょうか。
    723デフォルトの名無しさんsage2006/06/08(木) 16:20:58
    ! /e[r|l]/
    724デフォルトの名無しさんsage2006/06/08(木) 17:10:16
    >>723
    それはperlとかの話でしょ。
    純粋な正規表現ではない。
            ‾‾‾‾
    725デフォルトの名無しさんsage2006/06/08(木) 21:15:10
    >>722
    正規表現は補集合についても閉じてるからそのような正規表現は存在する
    という意味でできる。でもきっとめんどくさいからやめとけ。

    ^[^e]*(e[^rl][^e]*)*e?$

    「erまたはelが文中につく」正規表現なら簡単に書けるだろうから
    あとはマッチ成功と失敗をよみかえればOK。
    726・∀・)っ-○◎● ◆toBASh.... 2006/06/08(木) 22:19:36
    >>715

    (x([0-9]))で捕獲してx¥2でおkじゃね?
    複数含まれる場合はまぁ工夫してくれ
    727デフォルトの名無しさんsage2006/06/09(金) 10:51:02
    >>722
    これでいける。
    ^(.(?!el|er))*$
    ただ先頭にelが付くとだめだけど。それ以外は問題なし。
    正規表現の文字列否定は方実現手段がしょぼいからなぁ・・・
    728デフォルトの名無しさんsage2006/06/09(金) 10:56:18
    正規表現以外を併用して抜き出したほうがおおむねわかりやすいな
    729デフォルトの名無しさんsage2006/06/09(金) 10:59:56
    否定表現が難しい理論的な理由をひとことで説明できます?教えてきぼんぬ。
    730デフォルトの名無しさんsage2006/06/09(金) 11:24:25
    図面が描けるかどうかでしょ。
    731デフォルトの名無しさんsage2006/06/09(金) 11:32:57
    え?どゆこと?
    732デフォルトの名無しさんsage2006/06/09(金) 11:38:01
    だから状態遷移図が描けるパターンは正規表現で必ず表現できるけど
    否定の場合描けない可能性もあるわけで
    733デフォルトの名無しさんsage2006/06/09(金) 11:46:10
    /*comment*/を削除することはできますが、

    s/¥/¥*.*?¥*¥///g

    /*comment*/を
    に置換することはできるでしょうか。
    コメント内の文字1つ1つをスペースに置換したいです。
    734デフォルトの名無しさんsage2006/06/09(金) 12:09:43
    >>733

    Cのコメント処理は正規表現で扱うには不向きです。
    あとで、そういうときにどうやって図面引いて
    どうやってそこからプログラムを起こすかの手順を
    FAQページに書いときまつ。
    735デフォルトの名無しさんsage2006/06/09(金) 12:58:29
    >>732
    あ、なるほどね。最初からそう言ってくれい。
    いきなり「図面」ってなんじゃい?と思ったよ。
    736デフォルトの名無しさんsage2006/06/09(金) 13:04:11
    >>733
    Perl ならこんな感じ?

    s/¥/¥*(.*?)¥*¥//" " x length($1)/ge;
    737デフォルトの名無しさんsage2006/06/09(金) 13:11:57
    >>736
    すんません。自分javaです
    738デフォルトの名無しさんsage2006/06/09(金) 13:14:26
    先に言ってくれ・・・
    で、マッチした文字列の長さ分の空白文字を並べれば良いんじゃないの?
    739デフォルトの名無しさんsage2006/06/09(金) 13:15:43
    あ、あと、Java だといくつも正規表現ライブラリがあるから、
    そこまで申告しといた方が良いと思われ。
    740デフォルトの名無しさんsage2006/06/09(金) 13:44:13
    >>737
    import java.util.regex.*;

    Pattern pattern = Pattern.compile("/¥¥*.*?¥¥*/");
    Matcher matcher = pattern.matcher("/* comment */");
    StringBuffer buffer = new StringBuffer();
    while (matcher.find()) {
     char[] spaces = new char[matcher.group().length()];
     java.util.Arrays.fill(spaces, ' ');
     matcher.appendReplacement(buffer, new String(spaces));
    }
    matcher.appendTail(buffer);
    System.out.println(buffer.toString());
    741デフォルトの名無しさんsage2006/06/09(金) 16:20:00
    >>736
    javaのPerl5Utilでx length($1)ができると思ったのですが、だめでした・・・
    742デフォルトの名無しさん2006/06/11(日) 04:16:20
    文字列内に含まれる全ての単語を置換したいと考えてます。
    ただし、特定のデリミタ("")が含まれてる場合はその中の文字は置換したくない
    んですがうまくいきません。

    (php)
    $code = preg_replace('/([^¥s"]¥w+[^¥s"])/', 'replace', $src);

    これだと$srcに「a」が入ってきてもreplaceに置換されません。
    (aaaだとreplaceになるんですが)

    どのように書けば良いのでしょうか。
    743デフォルトの名無しさんsage2006/06/11(日) 04:31:44
    splitで分割して、偶数番目の要素のみ置換した後、joinしてみては。
    744デフォルトの名無しさんsage2006/06/11(日) 11:27:23
    >>742
    先読みの類が使えれば簡単に書ける。perlならこう。PHPでどう書くかは知らない。

    s/(?
    「"」が必ず対になっていることを仮定してよければ

    s/(^|[^"¥w])¥w+/$1replace/g

    でもいいだろう。末尾側の区切りを敢えて調べないのは、
    先読み使わずに食ってしまうと

    foo,bar

    見たいな時に困るから。
    745デフォルトの名無しさんsage2006/06/12(月) 17:54:05
    「参考:正規表現エンジンの設計」を追加
    http://capslockabcjp.kitunebi.com/faq.html
    746デフォルトの名無しさんsage2006/06/12(月) 23:12:16
    spamメール対策で正規表現を使おうと思ってます。

    英文のみの件名を削除したいのですが

    [a-z0-9]でいいのでしょうか?

    大文字も小文字も削除したいのですが。

    747デフォルトの名無しさんsage2006/06/13(火) 02:00:23
    >> 746

    どんなツールで正規表現使おうとしているかくらい書こうよ。

    で英文には , とか . もあったりはしないか?
    とりあえず [a-z0-9]じゃあふつーは(別のところで指定しない限り)
    大文字は含まれない。
    748デフォルトの名無しさんsage2006/06/13(火) 02:08:14
    こういったスパムに対応できない(- -)
    "最高女性の自宅リアル映像を無料生中継にて配信中!"
    749デフォルトの名無しさんsage2006/06/13(火) 11:17:35
    >>746
    英文SPAMだけ対応すればいいのなら
    メールヘッダの国コードだか言語設定だか見て日本以外なら弾くって方が楽

    と、オレは聞いた
    750デフォルトの名無しさんsage2006/06/13(火) 17:53:25
    >>747

    すいません、
    spam mail kellerというソフトなんです
    英文のみの件名を削除したいのですが...
    もちろん日本語が含まれている場合は削除しない
    にしたいのですが...

    [a-z0-9]では、日本語が含まれている場合でも
    削除されてしまうのでしょうか?

    751デフォルトの名無しさんsage2006/06/13(火) 17:57:02
    いいえ
    752デフォルトの名無しさんsage2006/06/13(火) 18:26:34
    >spam mail keller
    珍しい名前のソフトだな。つーか、そもそもkellerってなんだ?
    753デフォルトの名無しさんsage2006/06/13(火) 18:43:14
    漢字の取り扱いはプログラムの作り次第だから
    リファレンスマニュアルへのURLとか抜粋が無ければ対処できない。
    つーかあそこのサイトにサポート掲示板の過去ログCGIあるんだけど検索したの?
    754デフォルトの名無しさんsage2006/06/13(火) 18:50:53
    >>750
    そのソフトがどういう実装してるか分からないが
    海外製のソフトは大抵マルチバイト環境を考慮してないので(略)

    というか、件名のみでSPAMと判断するなよ。
    755デフォルトの名無しさんsage2006/06/13(火) 21:58:25
    >>748
    女性 をNGワードにする

    ようこそ…… 『男の世界』へ……
    756デフォルトの名無しさんsage2006/06/14(水) 16:43:31
    >>746
    Perl の正規表現を使ってもいいのなら

    ^[¥x20-¥x7e]+$

    かな。但しメールの Subject: って複数行に渡るこういう書き方も出来るんだよね。

    Subject: aaaa
     bbbb
     cccc

    これはおそらく画面に出る時に aaaa bbbb cccc と出てくる。つまり、複数行に
    渡る Subject: だったとしてもメールソフトの側で1行に直して出すということだ。

    こういったものに対してどのように処理するのかによってマッチする正規表現が変わる
    可能性がある。1行に直した後の行に対するものか、それともその前の状態に対する
    ものかの違いだ。
    757デフォルトの名無しさんsage2006/06/14(水) 18:43:24
    SubjectはMIMEエンコードされてますよ
    758デフォルトの名無しさんsage2006/06/15(木) 03:14:22
    後から小出しに条件出すのやめろよ。先に言え。
    759デフォルトの名無しさんsage2006/06/15(木) 03:16:29
    常識では?
    760デフォルトの名無しさんsage2006/06/15(木) 03:20:55
    Mozillaの振り分けフィルタだとデコードしてから比較するから常識というもんでもないね。
    761デフォルトの名無しさんsage2006/06/15(木) 06:08:27
    >>760
    でも>757は常識だね。
    762デフォルトの名無しさん2006/06/16(金) 22:46:55
    "は特殊文字に含まれますか?
    763デフォルトの名無しさんsage2006/06/16(金) 22:52:14
    どの言語の正規表現かにもよるが一般的にはいいえ
    764デフォルトの名無しさんsage2006/06/16(金) 22:57:18
    >>763
    javaです。
    文字列に「"」が入ってる場合にはどうしたらいいんでしょうか?
    765764sage2006/06/16(金) 23:02:30
    自己解決しました
    766デフォルトの名無しさんsage2006/06/17(土) 05:36:34
    正規表現関係ねぇ

    >>765
    自己解決した場合も、解決方法自己レスしとけっつーの。
    767766sage2006/06/17(土) 07:34:38
    自己解決しました
    768デフォルトの名無しさんsage2006/06/21(水) 02:48:08
    http://capslockabcjp.kitunebi.com/faq.html

    参考2:正規表現エンジン設計(遅延評価DFA)
    をなんとなく追加
    769デフォルトの名無しさんsage2006/06/21(水) 13:29:58
    >>768
    乙。
    個人的に興味のあるテクなんでよかった。
    欲をいえばもう少し詳しく。

    あと、現行のglibcのregexも、遅延したdfa構築を
    しているみたいなんだけど、後方参照も
    使えるしどうなんだろうか?

    自分で読め? ごもっとも。
    ところで
    捨てざろう得ない

    捨てざるを得ない
    では?
    770デフォルトの名無しさんsage2006/06/21(水) 13:33:24
    >>769
    そういうつっこみはそのサイトの管理者に言えよ
    771デフォルトの名無しさんsage2006/06/21(水) 16:16:42
    DFAでバックリファレンスというのは従来の設計では無理っぽい

    http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/10657

    私の記憶が正しければGNU grepは、使える場合にはDFAを使うこと
    で高速化していたと思います。

    たとえば、egrepでもDFA型で対応できないバックリファレンスを含
    むものは、NFA型を使うことになるので同じような状況で、同じよ
    うな理由で失敗します。
    772769sage2006/06/22(木) 00:11:36
    >>770
    すまん。
    メールでの連絡先はあったけど、直接コメントとかは書けないみたいだったし、
    捨てアド作ってメールするのもなあと思ったんで。

    >>771
    GNU grep のregexは現行の glic (2.3.6だっけ?) のregexとはぜんぜん別物です
    (grepの使ってるやつのほうが古い)。でも多分に俺の勘違いっぽいので
    忘れてください。
    773デフォルトの名無しさん2006/06/29(木) 18:52:46
    ドコモのUTNを切り出すために
    ser[A-Za-z0-9]{15}
    こんな風にしたんだけど、[A-Za-z0-9]の部分を11回または15回繰り返すようにはどうすればいい?
    774デフォルトの名無しさんsage2006/06/29(木) 19:02:21
    11回と15回を|でならべるか、11回のあとに4回を?でくっつけるか
    といったあたりが素直じゃないか。

    ser([A-Za-z0-9]{11}|[A-Za-z0-9][15})
    ser[A-Za-z0-9]{11}([A-Za-z0-9]{4})?
    775773sage2006/06/29(木) 19:39:43
    >>774
    サンクス。
    776デフォルトの名無しさん2006/07/04(火) 06:15:14
    正規表現と正規言語とは同じものでつよね。
    正規言語は入れ子構造が許されないということですけど
    正規表現では入れ子構造が表現できるではないでつか。
    そこら辺どうなってんの。
    777デフォルトの名無しさんsage2006/07/04(火) 08:20:21
    最初は正規言語族だったけど、
    拡張しまくったらつきぬけた。
    名前だけはそのまま残ってる。
    778デフォルトの名無しさん2006/07/04(火) 13:59:56
    xyzzyの使い方が分からぬやし 励ましあえ その9
    http://pc7.2ch.net/test/read.cgi/software//
    より誘導されてきました。

    正規表現で
    「http://」で始まらず、「.html」で終わる文字列
    にマッチさせるにはどうすればいいでしょうか。
    言語はPerlです。
    779デフォルトの名無しさんsage2006/07/04(火) 15:02:21
    ^[^http://]¥.html$

    上のは参考にしないように。間違ってたら誰か教えて。
    780デフォルトの名無しさんsage2006/07/04(火) 15:13:03
    一発でいくのはめんどくさいから
    !m/^http:¥/¥// && m/.html$/
    とかやっちゃうかな?
    781778sage2006/07/04(火) 15:33:30
    すいません。自己解決しました。
    ^(?!http:¥/¥/).*¥.html$
    でできました。
    782デフォルトの名無しさんsage2006/07/05(水) 00:42:39
    >>777(ぞろ目出ますた。)
    では、正規表現は、文脈自由文法なのでつか。
    783デフォルトの名無しさんsage2006/07/05(水) 00:55:06
    ゆえに正規表現は自然言語処理でよく使われる
    784デフォルトの名無しさんsage2006/07/05(水) 00:56:34
    オートマトンの構造で考えるなら、スタックマシンになってれば
    文脈自由法の解析能力を持つだろ。
    そういう意味だと現実の正規表現エンジンはそうなってない。
    (典型的なNFAエンジンはスタックを持つけどパーサのスタックとは違う)

    もしやるなら
    /[.abc(de|[.fg.])+.]+/
    こんな力業ができそうだけど、コスト的に実用性に疑問符がつく。
    785デフォルトの名無しさんsage2006/07/05(水) 01:06:05
    >>784
    なーほど(メモメモ。一晩、じっくり考えて見まつ。
    外側の[ ]の中のものはみんな文字リテラルに解釈されるんじゃないのかなぁ。
    786デフォルトの名無しさんsage2006/07/05(水) 01:08:20
    補足:
    正規表現・コンパイラは便利な性質を持つ仮想機械の設計論であって
    自然法則の発見とか、自然現象の解析ではないのだから
    何が真実で何が誤りということはないと思う。
    787デフォルトの名無しさんsage2006/07/05(水) 01:19:31
    >>786
    しかしChomskyは、自然言語は入れ子構造があるから正規言語ではなくて
    文脈自由言語だとして生成文法を確立した。ところが、正規表現が
    正規言語を超えて入れ子を扱えるようになったのなら、自然現象(自然
    言語)の解析に関して、どちらが真でどちらが偽かといった問題も
    もう一度論じられていいはず。
    788デフォルトの名無しさんsage2006/07/05(水) 02:44:28
    >>776,787
    言語理論の正規表現と、このスレとかで一般に参照されてる工学的応用の面から拡張した
    正規表現は区別して論じてください。

    理論の正規表現が入れ子を扱えるように変わった(時代を経てそう進化した)わけじゃない。
    工学的応用としてのパターンマッチ技術上、そいういう拡張が一般化しただけですよ。

    だから自然言語の解析を理論の点から再度論じても、再度同じ結論が出るに過ぎないのでは。
    789デフォルトの名無しさんsage2006/07/05(水) 11:04:51
    >>788 べつに区別しなくて良いよ。
    自然言語処理でも結局正規表現は文脈自由文法ということで
    自然言語を表現する為に使ってる。
    自然言語処理のプログラムに、なぜ正規表現を使うんですか?
    という野暮な質問は来ない。
    790デフォルトの名無しさんsage2006/07/05(水) 13:52:43
    hoge
    hoge

    上記の value 部分だけを抽出したいのですが、どのようにすればいいのでしょうか。
    秀丸では で動くのですが、PHP では動いてくれませんでした……。
    791デフォルトの名無しさんsage2006/07/05(水) 14:21:24
    まあ、そうだろうな。



    というかその言語での正規表現の基本部分の簡単な書き方の勉強はしたほうがいい。
    普段のやりたいことの9割まではそのときの1時間程度の勉強で覚えたことで済む。
    残りの1割の部分で聞いたり調べたり悩んだり諦めたりしろ。時間もったいないし。
    792デフォルトの名無しさんsage2006/07/07(金) 02:18:04
    value=¥"(.*)¥"¥/

    これだけでもいいんじゃないの?
    793デフォルトの名無しさんsage2006/07/07(金) 03:54:28
    その場合は逆にvalue=を残したわけを聞きたいね
    794デフォルトの名無しさんsage2006/07/07(金) 19:50:44
    >>793
    >>790
    >上記の value 部分だけを抽出したいのですが
    795デフォルトの名無しさんsage2006/07/07(金) 20:04:03
    秀丸で動作させてたコードを意図の参考にするべきだろうな
    ぶっちゃけ例でだけなら ¥"(.*)¥"¥/ で動作するわけだし
    きっと他の部分でコレでは駄目な理由があるんだろう
    796デフォルトの名無しさん2006/07/07(金) 20:06:39
    >>795
    それじゃ type= も抜いちゃうじゃん
    797デフォルトの名無しさんsage2006/07/07(金) 21:42:01
    正規表現自体は特に間違っていると思わないから
    PHPのスクリプトのバグか
    漢字のエンコード設定他でhogeの部分でのハングとか、そういう雰囲気
    798デフォルトの名無しさんsage2006/07/07(金) 21:45:34
    >>794
    >  上 記 のvalue部分
    799デフォルトの名無しさんsage2006/07/08(土) 03:59:23
    >>790
    使ってる関数はなに?
    PHPにはPerl互換のやつとPosixのヤツがあるよ
    これは微妙に動作が違う
    実際に試して無いけど、Perl互換のヤツ使ってて / が正規表現の開始or終了にみなされてるとか・・・
    とりあえずソース見せてよ
    800デフォルトの名無しさんsage2006/07/08(土) 04:01:35
    Aに一致したらBに、A'だったらCに
    といった置換は出来ますか?
    801デフォルトの名無しさんsage2006/07/08(土) 09:03:35
    >>800
    Perlだけど、

    $line="AXYDA'XYDAAXYA'XA'A'";
    $2? $line =‾ s/$&/B/ : $line =‾ s/$&/C/ while $line =‾ /(A)(')?/;
    print $line, "¥n";
    802デフォルトの名無しさんsage2006/07/08(土) 09:21:12
    >>800
    s/A'/C/g;
    s/A/B/g;
    803デフォルトの名無しさんsage2006/07/08(土) 10:28:27
    perlの正規表現が変なんだよ。perl方言と言うか。
    804デフォルトの名無しさんsage2006/07/08(土) 10:36:20
    805デフォルトの名無しさんsage2006/07/08(土) 11:27:37
    自分が理解できないものを「変」に思うのは精神分裂症の兆候、
    病院に急げ!
    806デフォルトの名無しさんsage2006/07/08(土) 12:02:59
    そもそも、
    803がこのスレのどの流れ、どのレスを受けての書き込みなのか、
    わからないのだが。
    807デフォルトの名無しさんsage2006/07/08(土) 12:32:44
    ふつうリファレンス省略されてれば直前を指す。
    808デフォルトの名無しさんsage2006/07/08(土) 13:01:35
    >>802
    s/(?:(A)|(A'))/(defined $1)? B: C/ge

    のように同時に置換しないと場合によってはおかしくならない?
    A,A',B,Cが文字通りその文字列ならそれでいいけど。
    809デフォルトの名無しさんsage2006/07/08(土) 13:42:31
    あらゆる不測に対応するためなら>>808でも不足でないかい
    810デフォルトの名無しさんsage2006/07/08(土) 14:25:19
    >>807
    802の正規表現がPerlの方言って事ですか?
    811デフォルトの名無しさんsage2006/07/08(土) 15:03:04
    標準的な正規表現ってどれ?
    日本語対応の文字コードってUTF?
    812デフォルトの名無しさんsage2006/07/08(土) 15:12:36
    日本語でおk
    813デフォルトの名無しさんsage2006/07/08(土) 18:52:03
    日本語の文字コードはJISに決まってる。
    日本工業標準規格だし。
    814デフォルトの名無しさんsage2006/07/09(日) 01:31:25
    >>813

    JISで決まっている文字コードってひとつじゃないじゃんw
    815デフォルトの名無しさんsage2006/07/09(日) 01:45:05
    ^‾
    816デフォルトの名無しさんsage2006/07/09(日) 09:02:09
    もうさ、基本的にUTF-8に統一しようぜ。それ以外は
    「とりあえずサポートするけど動かなかったらごめんよ」
    というスタンスでいいじゃん。 携帯ブラウザ氏ねよ。全滅しろ。ちくしょう
    817デフォルトの名無しさんsage2006/07/09(日) 09:20:13
    そのUTF-8が2種類来るから困るのだが。
    818デフォルトの名無しさんsage2006/07/09(日) 10:07:41
    引退前にゲイツさんが強権発動してミリヤリちゃんとした統一の符号方式を押し付けて行ってくれたらいいのに。
    819デフォルトの名無しさんsage2006/07/09(日) 11:32:31
    Perlのモジュール使えば、どんな文字コードも恐れるに足らず。
    みんなが困ってるのを傍目に見ながら、どんな文字コードでも
    多言語でも簡単に処理できてる漏れ様にとっては、このままの方が
    ありがたいね。
    820デフォルトの名無しさんsage2006/07/09(日) 11:50:20
    >>819
    フン、いいな暇そうで
    821デフォルトの名無しさんsage2006/07/10(月) 00:03:09
    自分は3種類使ったことがある
    UTF-8(Webでよく使われる)
    UTF-7(DBで見る)
    UTF-16(Windowsアプリ UTF-16というよりUNICODEだけど)
    822デフォルトの名無しさんsage2006/07/10(月) 00:12:40
    UNICODE対応するには:

    UTF-8:テキトーなパッチでとりあえずソフトは動くだろう。完全対応が大変。
    UCS-4:ある程度ソフトの再設計が必要になるだろう。完全対応はラク。
    823デフォルトの名無しさんsage2006/07/10(月) 06:29:29
    >>822
    ン、いいな暇そうで
    824デフォルトの名無しさんsage2006/07/10(月) 08:58:12
    >>822
    日本じゃなければそれでいいのかもしれないが、日本だと

    JISかMSか決める
    決めても違うほうで作るバカがいるので直させる
    やりとりする外部のシステムが両方混在していてめちゃくちゃ

    とかいうどうでもいいところで工数を無駄に消費するのだった
    825デフォルトの名無しさんsage2006/07/11(火) 16:39:05
    UnicodeはSJIS賀来町文字で何かと面倒
    826デフォルトの名無しさん2006/07/12(水) 11:37:24
    VBscriptで | が使えないのですが、対象方はありますか?
    8278262006/07/12(水) 11:47:37
    正規表現暦2日です。VBscriptを使用します

    状態: 2002/03/26 [1-2] 2003/03/26 [1-2] 2004/03/26 [1-10], 2005/03/28 [1-2], 2006/03/28 [1-2]

    状態: なし
    状態: 1991/03/26 [1-1]
    状態: 1988/03/28 [1-1] 1991/03/26 [1-5]
    状態: 1983/03/28 [1-1] 1984/03/28 [1-7] 1985/03/27 [1-4] 1986/03/27 [1-5] 1987/03/27 [1-6]
    1989/03/28 [1-5]

    データは上の5種類です。5行目は途中で
    がありますがの前まで取得する必要があります。
    状態:より後ろのデータを取得したいのですがどういう表記がいいのでしょうか?

    状態:+([^<]+)
    |状態:+([^<]+)|状態:+([^<]+)
    ではうまくいきませんでした。
    828デフォルトの名無しさんsage2006/07/12(水) 12:21:32
    >>827
    行末の
    や が要らないんであれば
     状態:(.*)<
    で良さそうだけど、行末の だけは要らないとかなら
    いったん行末まで全部とって だけ削除したほうが簡単かも。
    8298262006/07/12(水) 12:51:23
    >>828
    行末のタグは必要ありませんが、それだと5行目の途中で

    があると、その前までしか取得できませんね。
    .
    830デフォルトの名無しさんsage2006/07/12(水) 12:54:38
    状態:(.*(
    )?.*)|状態:(.*)
    |状態:(.*)
    だったりして。
    831デフォルトの名無しさんsage2006/07/12(水) 12:55:23
    恐らく正規表現使わない方が速いし簡単。
    832デフォルトの名無しさんsage2006/07/12(水) 13:26:57
    具体的には?
    getcharで一文字ずつ比較?
    833デフォルトの名無しさんsage2006/07/12(水) 14:30:54
    状態:(.*)
    で一度カッコの中を取り出して、それに対して
    (.*)
    で一致すればカッコの内容で置き換え、
    さらに、
    (.*)<.*>
    で行末のタグは切ればよいんでないの?
    834デフォルトの名無しさんsage2006/07/12(水) 20:55:55
    ^状態:(.*)(¥w+>)?$
    835デフォルトの名無しさんsage2006/07/13(木) 00:00:22
    サクラエディタを使っています。
    空の行があったら、その前の行の最後に「¥」を表示させたいのですが
    何か良い手立てはありませんでしょうか?下のが例です。

    >あああ
    >
    >いいい

    >あああ¥
    >
    >いいい
    836これではきっとダメだろうsage2006/07/13(木) 01:14:42
    s/¥n¥n/¥¥¥n¥n/
    837デフォルトの名無しさんsage2006/07/13(木) 01:21:54
    サクラって改行の置換は変な挙動示した覚えがある
    838デフォルトの名無しさんsage2006/07/13(木) 01:57:14
    >>829
    え?VBの正規表現ってそうなの?
    普通は最長一致だから一番最後の < にマッチするはずなんだけど。
    839デフォルトの名無しさんsage2006/07/13(木) 03:38:11
    質問です。
    2chブラウザのV2Cで非表示設定をするための正規表現を考えています。
    正規表現のルールはJava一般の物が適用されるらしいです。

    例えば
    ぬるぽ ぬるぽ ぬるぽ ぬるぽ
    というような同じ語句の繰り返しだけのレスを非表示にしたくて
    今は
    (?:^|^¥n+)(.{4,}[ ¥s]*)¥1{3,}
    としています。
    しかしこれだと
    あああああああああああああああ
    と書いてある程度でも非表示になってしまいます。
    そこで
    .{4,}の部分を、違う文字の連続という風にできればいいなと
    思っているのですが、そんな事は可能でしょうか。
    840デフォルトの名無しさんsage2006/07/13(木) 04:12:05
    POSIXの文字クラスが完璧にサポートされていれば、
    ([.ぬるぽ.]+)で可能だけどおそらくサポートされていない。
    エイホらの定義から外れてしまうので正規表現と呼べるかも微妙。
    841839sage2006/07/13(木) 06:21:16
    レスありがとうございます。
    ちょっと変えて下記のように直しました。
    (?:^|^¥n+)([^ ¥s]{3,})[ ¥s]*¥1[ ¥s]*¥1

    これだと
    ぬるぽ ぬるぽ ぬるぽ
    ぬるぽ ぬるぽ ぬるぽ
    というような場合に
    「ぬるぽ」に([^ ¥s]{3,})が一致して¥1に記憶されると思います。
    ¥1が繰り返されるが
    ¥1の区切りは、全角スペースの場合もあれば改行の場合もある、
    といった場合はどう表現したらいいんでしょう。
    842デフォルトの名無しさんsage2006/07/13(木) 06:43:02
    /ガッ/
    843デフォルトの名無しさんsage2006/07/13(木) 18:47:09
    正規表現の方言の落とし穴に嵌る香具師多数。
    JISかISOで標準正規表現規格を制定してみんな従えば便利なのにな。
    844デフォルトの名無しさんsage2006/07/14(金) 02:38:33
    >>843

     IEEE (POSIX) は公的機関じゃないからだめってことか?
    845デフォルトの名無しさんsage2006/07/14(金) 11:02:05
    POSIXは準拠程度の互換性しか無いし。
    846839sage2006/07/14(金) 23:40:37
    すいません。あらためて質問します。

    ぬるぽ ぬるぽ ぬるぽ ぬるぽ(1行に4つ)にも

    ぬるぽ ぬるぽ ぬるぽ
    ぬるぽ ぬるぽ ぬるぽ
    (1行は3つだが次の行まで数えると4つ以上)

    のどちらにもマッチするにはどのように書けばいいでしょうか?
    847デフォルトの名無しさんsage2006/07/15(土) 00:39:44
    (?:ぬるぽ(?:
    | |¥s)+){4,}
    848デフォルトの名無しさんsage2006/07/15(土) 11:46:59
    >>846
    おまいは勉強してるのか
    849839sage2006/07/16(日) 10:34:01
    >>847
    レスありがとうございます。
    自分は
    (正規表現){4,}
    と書いてあった場合、まず最初に1つ
    (正規表現)に一致するものがあったら、
    それと全く同じ物が4つ以上続く場合にマッチするのかと思っていたのですが、
    繰り返しごとに(正規表現)にマッチするか判断されるんですね。

    今度はその「ぬるぽ」が「ぬるぽ」とは限らないが
    毎回同じ言葉の場合にどう書けばいいのかわかりません。orz

    ぬるぽ ぬるぽ ぬるぽ でも
    ほげげげ ほげげげ ほげげげ でも
    はががが はががが はががが でも
    マッチするが
    ぬるぽ ほげげげ はががが
    にはマッチしないようにするにはどうすればいいんでしょう。
    >>847の「ぬるぽ」を単純に「.{3,}」に置き換えると
    ぬるぽ ほげげげ はががが
    にもマッチしてしましますよね。

    >>848
    すいません。
    オライリーの正規表現の本とか買ってちゃんと勉強すれば
    わかる事なんですよね。きっと。orz
    850デフォルトの名無しさんsage2006/07/16(日) 11:18:03
    >>849
    >>841
    851デフォルトの名無しさん2006/07/16(日) 17:40:22
    MySQLをのregexpを利用して条文データから正規表現的な検索をしたいと思ってます。
    例えば
    select * from JouBun where title regexp '^第[1-9]+[0-9]?条'
    みたいな感じです。
    上記の例はうまく行くのですが、
    select * from JouBun where title regexp '^第[1-9]+[0-9]?章'
    となると全く検索されてきません。
    defaultのcharacterはsjisを使用してます。どなたかご存知の方いらっしゃいましたらお教え願えませんでしょうか?

    よろしくお願いいたします。
    852デフォルトの名無しさんsage2006/07/16(日) 17:48:11
    文頭に空白があるなどの理由で「第○○章」は厳密な文頭から始まっていないからマッチしない
    853デフォルトの名無しさん2006/07/17(月) 03:34:52
    >>852
    どうやらその通りでした。
    select * from JouBun where title regexp '^[ ]?第[1-9]+[0-9]?章'

    でものの見事にマッチ!!
    ありがとうございました。
    でも条の前にも半角スペースあったんですけどね・・・・
    一つだけの半角スペースは無視するけど、2つ以上だと無視しないって事でしょうか・・・
    854デフォルトの名無しさんsage2006/07/19(水) 15:13:20
    すみませんが、教えてください。

    Windowsで作られたテキストファイルの中に、
    ファイル名をフルパスで書かれた行があります。
    ここからファイル名を除いたパスを抽出したいのですが
    どのようにすればいいのでしょうか?

    例:
    c:¥xxx¥test.txt > c:¥xxx¥
    e:¥xxx¥yyy¥zzz¥readme.txt > e:¥xxx¥yyy¥zzz¥

    ドライブやフォルダの階層はまちまちです。
    よろしくお願いします。
    8558542006/07/19(水) 15:26:01
    追記します。
    フルパスが書かれてる行は指定できるようになったので、
    テキスト全体から抽出するための条件は考えなくていいです。

    ドライブ名やフォルダの階層がまちまちの、一行のフルパスから、
    ファイル名を除いたパス名だけを抽出する方法を教えてください。
    856デフォルトの名無しさんsage2006/07/19(水) 15:30:48
    (.+)¥¥
    8578542006/07/19(水) 15:46:14
    ありがとうございます。できました。
    本当に助かりました。
    858デフォルトの名無しさんsage2006/07/21(金) 09:06:39
    >>856,857
    テキストファイルが ShiftJIS だとして
    C:¥表¥abc¥123.txt
    とかは失敗するが OK ?
    859デフォルトの名無しさんsage2006/07/21(金) 13:48:14
    >>858
    Perlはそういうのも考慮させることができるよ(他の言語だとどうだか知らないが)。
    Perl の場合は use encoding 'shift_jis'; をプログラムに書いておくか、または
    コマンドラインで -Mencoding=shift_jis のオプションを付ければいい。
    860デフォルトの名無しさんsage2006/07/21(金) 15:24:51
    その前に、どう失敗するのかと
    861デフォルトの名無しさんsage2006/07/22(土) 05:07:27
    質問スレとして生きるなら質問テンプレ作ろうぜ
    どいつもこいつも回答者を超能力者か何かと勘違いしている
    862デフォルトの名無しさんsage2006/07/22(土) 06:31:08
    エスパー以外は解凍しなくていいよ
    863デフォルトの名無しさんsage2006/07/22(土) 06:43:31
    じゃあ>>862も冷凍。
    864デフォルトの名無しさんsage2006/07/22(土) 11:15:05
    >>862
    どこにお宝zipがあるか探しちゃったじゃねーか。
    865デフォルトの名無しさんsega2006/07/22(土) 15:02:36
    ¥b って何をもって単語区切りとしてるんだっけ
    866デフォルトの名無しさんsage2006/07/22(土) 15:03:15
    ¥n
    867デフォルトの名無しさんsage2006/07/22(土) 19:03:29
    >>865
    Perlでは¥Wと¥wの間(またはその逆)と書いてあった
    868デフォルトの名無しさんsage2006/07/22(土) 19:28:47
    ¥t
    869デフォルトの名無しさん2006/07/23(日) 00:11:13
    拡張子jpg,gif,png以外のファイルを抽出したいのですが全く上手くいかないので教えてください。
    ¥W¥.(jpg|gif|png)$
    な感じかと思って試行錯誤しましたがダメでした・・・
    870デフォルトの名無しさんsage2006/07/23(日) 00:12:12
    お前には無理だ
    諦めろ
    夕日が呼んでるぜ
    871デフォルトの名無しさんsage2006/07/23(日) 00:15:52
    ¥f
    872デフォルトの名無しさんsage2006/07/23(日) 03:38:08
    >>869
    /^.+¥.(?!(jpg|gif|png)).+$/
    >>116-117参照汁
    873デフォルトの名無しさんsage2006/07/23(日) 03:39:17
    ttp://snapshot.publog.net/html/php/2003/11/19/214238.html
    >>116-117だど。
    874デフォルトの名無しさんsage2006/07/23(日) 03:47:18
    ¥g
    875デフォルトの名無しさんsage2006/07/23(日) 09:37:55
    >>872
    それってperl固有でねーですか。汎用的には無理?
    876デフォルトの名無しさんsage2006/07/23(日) 10:02:54
    汎用的って何ですか
    You の使っている処理系で動くように書けば汎用的ってことになるんですか
    その割にどのツールで使いたい etc の情報が皆無なんですが
    877デフォルトの名無しさんsage2006/07/23(日) 12:38:10
    POSIX標準でないかなぁと。ならツールを選ばんでしょ。
    878デフォルトの名無しさんsage2006/07/23(日) 17:36:28
    そんなことはない
    879デフォルトの名無しさんsage2006/07/23(日) 20:18:51
    ¥¥
    880デフォルトの名無しさんsage2006/07/25(火) 09:38:17
    >>872
    > /^.+¥.(?!(jpg|gif|png)).+$/
    は/^.+¥.(?!(jpg|gif|png))[^¥.]+$/の方がいいね。
    881デフォルトの名無しさんsage2006/07/25(火) 09:38:36
    ¥p
    882デフォルトの名無しさんsage2006/07/25(火) 19:32:41
    >>872
    >>880
    foo.jpgfとかの拡張子がjpgじゃないファイル名まではじいちゃうのでまずい
    /^.+¥.(?!(jpg$|gif$|png$))[^¥.]+$/
    でどうかな?
    883デフォルトの名無しさんsage2006/08/06(日) 00:27:09
    >>882
    うん、それがいいと思う。
    884デフォルトの名無しさんsage2006/08/12(土) 22:46:42
    >2006/08/05
    >2006/08/04
    >2006/08/01


    >2004/01/01

    というリストがあって、no=の後の番号を抽出したいのですが、
    >20ではうまく抽出できませんでした。
    ご教授いただければ幸いです。
    885デフォルトの名無しさんsage2006/08/12(土) 22:50:51
    とりあえず、?とか.はエスケープしとけよ。
    886デフォルトの名無しさんsage2006/08/12(土) 22:57:36
    >>885
    ?を¥?に変えたところ、うまくいきました。
    ありがとうございます。
    887デフォルトの名無しさん2006/08/18(金) 13:34:24
    ここはいい勉強になるな
    http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/index.html
    888デフォルトの名無しさんsage2006/08/18(金) 14:23:35
    そこのサイトは先読みとバックトラックが大好きみたいだな。

    http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/regex-2-4.html
    これなんか
    (?
    /
    に置換
    とかしなくても

    ([^/])$

    $1/
    で十分なのに。
    889デフォルトの名無しさん2006/08/18(金) 14:28:03
    全ての2chAAにマッチする正規表現をくだしあ。
    890デフォルトの名無しさんsage2006/08/18(金) 14:59:09
    >>889
    .*

    2chAA以外のものにもマッチするけどな。
    891デフォルトの名無しさんsage2006/08/19(土) 12:22:04
    IPアドレス 255.255.160.0 - にマッチする
    正規表現を教えてくれたらお礼に私
    892デフォルトの名無しさんsage2006/08/19(土) 12:35:05
    255¥.255¥.1[6-9]¥d¥.¥d{1,3}
    893デフォルトの名無しさんsage2006/08/19(土) 13:09:37
    894デフォルトの名無しさんsage2006/08/19(土) 13:11:18
    >>892は早とちりして0点取る典型
    895酩酊 ◆TWARamEjuA sage2006/08/19(土) 14:03:38 ?BRZ(5000)
    こんなふいんきになるのかしら?
    255¥.255¥.1([6-8]¥d)|(9[01])¥.([0-9]$)|([1-9]¥d$)|(1[1-9]¥d[1-9]¥d$)|(2[0-4]¥d$)|(25[0-5]$)
    896酩酊 ◆TWARamEjuA sage2006/08/19(土) 14:05:48 ?BRZ(5000)
    あらやだこぴぺみす。
    255¥.255¥.1([6-8]¥d)|(9[01])¥.(¥d$)|([1-9]¥d$)|(1¥d¥d$)|(2[0-4]¥d$)|(25[0-5]$)
    897891sage2006/08/19(土) 14:13:05
    もういいです
    255¥.255¥.1([6-8]¥d|9[01])¥.([01]?¥d¥d?|2[0-4]¥d|25[0-5])
    898デフォルトの名無しさんsage2006/08/19(土) 15:55:57
    255.255.165.04
    899デフォルトの名無しさんsage2006/08/19(土) 16:49:27
    32ビット整数にして 0xffffa000以上0xffffc000未満の判定をしたほうが速そう
    900デフォルトの名無しさんsage2006/08/20(日) 00:21:25
    なんでもかんでも正規表現でやろうとしないほうがいいよね。
    >>891はその典型。
    901デフォルトの名無しさんsage2006/08/20(日) 02:42:04
    >>891程度なら正規表現で充分だろ。第一第二オクテットは固定だし。
    実運用上、正規のIPアドレスしか評価しないなら冗長な第四も不要になる。
    902デフォルトの名無しさんsage2006/08/20(日) 03:32:23
    ↑IPアドレスということを理解してるなら範囲が変動しうるということも理解して下さい。
    903デフォルトの名無しさんsage2006/08/20(日) 10:46:29
    >>902
    理解してるが、それって正規表現使うかどうかと関係ない話だなw
    904デフォルトの名無しさんsage2006/08/20(日) 13:26:48
    正規表現だとメンテナンス性が悪いと言うことはスレの流れを見て理解できた。
     187KB (192094Byte)
    dummy_for_searchRef

    DAT2HTML 0.32g Converted.