正規表現 part2

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん

関連スレ

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

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

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


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

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

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

↑の方を削除依頼すればいいのでは?
7デフォルトの名無しさん:2005/11/04(金) 00:03:13
さすがにこっちが本家だな。何が重複だか。バカじゃねーの?
8デフォルトの名無しさん:2005/11/04(金) 00:11:13
こんなことで喧嘩するなwww
9デフォルトの名無しさん:2005/11/04(金) 02:48:53
10デフォルトの名無しさん:2005/11/04(金) 13:53:13
0〜255までの数字を正規表現でどう表せばよいですか?
11デフォルトの名無しさん:2005/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
1210:2005/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デフォルトの名無しさん:2005/11/04(金) 16:07:56
>>10
言語は? Perl なら (?:1\d?\d?|2(?:5[0-5]?|[0-4]?\d?)|[3-9]\d?|0)
1410:2005/11/04(金) 16:20:22
>>13
言語は何でもいいよ。phpでも秀丸マクロでも。

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

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

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

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

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

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

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

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

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

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

こんな文字列があったとして
<>で囲まれている部分のみをマッチングするのは
<.+?>
ですが、その逆の囲まれていない部分のみをマッチングするには
どうしたらいいでしょうか。
61デフォルトの名無しさん:2005/12/19(月) 14:25:34
>>60
これじゃいかんの?
~$ perl -e '$var="xx<tag val=\"xxx\">xxx<\/tag>"; $var=~s/<.+?>//g); print "$var\n";'
xxxxx
6260:2005/12/19(月) 14:32:26
マッチングさせるだけでなくreplaceが必要なのです。
6360:2005/12/19(月) 14:36:17
連投すみません
************************
xx<tag val="xxx">xxx</tag>
************************
の<>で囲まれた部分は維持したまま
囲まれていない部分をreplaceする必要があるのです。
64デフォルトの名無しさん:2005/12/19(月) 14:37:24
それじゃ
sed -e 's/[^<]*</置き換えたいもの</ -e 's/[^<]*/置き換えたいもの/'
みたいな感じでは?
65デフォルトの名無しさん:2005/12/19(月) 14:50:09
情報小出しの典型的な教えてクン
6660:2005/12/19(月) 14:50:54
ありがとうございます。
しかし、たとえば
************************
xxx<tag val="xxx">xxx_xxx</tag>
************************
の<>で囲まれていない"xxx" を"yyy"にreplaceしようとすると
************************
yyy<tag val="xxx">xxx_yyy</tag>
************************
となってしまいます。
67デフォルトの名無しさん:2005/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デフォルトの名無しさん:2005/12/19(月) 16:50:26
Perlメモにそのものずばりがあったよ。
http://www.din.or.jp/%7Eohzaki/regex.htm#ReplaceOutside
O崎さんすら3度も書き換えてる!むずいんだ。
~$ perl -e '$var="xx<tag val1=\"xxx\">xxx<\/tag>xx<tag val2=\"xxx\">xxx<\/tag>xx"; $var =~ s/(?:^|(?<=>))(.*?)(?:$|(?=<))/yyy/g; print $var, "\n";'
yyy<tag val1="xxx">yyy</tag>yyy<tag val2="xxx">yyy</tag>yyy
70デフォルトの名無しさん:2005/12/19(月) 16:56:17
いけね、古いほう張っちゃった。これだとタグから始まる場合、まずい。
だけど
2002/10/21 「タグの外側だけ対象に置換する」スクリプトと文章追加
の最後に書いてある解決法、理解できん。
71デフォルトの名無しさん:2005/12/19(月) 23:10:18
>>69 正規表現 マッチしない でぐぐったらそんなの簡単に見つかるわけだし
まさかぐぐりもしないで質問したんだろうか?
72デフォルトの名無しさん:2005/12/20(火) 01:18:47
>>71
検索がお上手ですね  











、とでもいってほしいのか?
73デフォルトの名無しさん:2005/12/20(火) 09:52:15
下手といわれるよりはマシだろ
7460:2005/12/20(火) 10:08:26
>>69
ありがとうございます。
PHPで \G が使えないのでそのへんのロジックは
自分で書くしかないかなと思ってます。
75デフォルトの名無しさん:2005/12/20(火) 10:17:03
質問小出し作戦
7660:2005/12/20(火) 12:12:14
おかげで解決できました。
以下のようにしました。
<?php
$str = 'xxx1<tag val="xxx2">xxx3</tag><tag val="xxx4">xxx5_xxx6</tag>xxx7';
$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

yyy1<tag val="xxx2">yyy3</tag><tag val="xxx4">yyy5_yyy6</tag>yyy7

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

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

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


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

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

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

print "$_ : ", /^(\d+)(??{"a{$1}"})\z/ ? 'match' : 'unmatch', ".\n"
  for '2aa', '5aaaaa', '7aaa', '11aaaaaaaaaaa', 'aaaaa';
9087:2005/12/24(土) 18:59:20
>>88-89
レスありがとうございます。
が,(??{"a{$1}"})のところがよくわかりませんでした。。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html
に少し解説してある拡張構文の(?{ code })を使われてると推測したのですが,
「??」と2個続くとどういう意味になるのでしょう?
91デフォルトの名無しさん:2005/12/24(土) 19:17:47
92デフォルトの名無しさん:2005/12/24(土) 23:12:48
9391:2005/12/24(土) 23:20:14
>>92
ゴメソよく見てなかった…
94デフォルトの名無しさん:2006/01/04(水) 16:38:50
\1 に渡す方法について教えて下さい

A) <a href="mailto:xxxxx">作者名</a>
B) 作者名

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

つーか、この仕様の書き方だと
C) <a href="http://xxxx">作者名</a>
のときは 『<a href="http://xxxx">作者名</a>』 が
作者名になるな。うん。
97デフォルトの名無しさん:2006/01/04(水) 21:36:20
つーかHTMLパーサのスレってなかったっけ?
XMLのスレには含めたくないみたい。
98デフォルトの名無しさん:2006/01/06(金) 22:29:59
// C#
string text = "<a href=\"mailto:xxxxx\">作者名</a>\r\n作者名";
Regex re = new Regex("(^.*>(?<name>.+)<.*$)|(^(?<name>.+)$)", RegexOptions.MultiLine);
foreach(Match m in re.Matches(text)){
    Console.WriteLine(m.Groups["name"].Value);
}
99デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/01/19(木) 18:42:01
s/.*log:(\d+)\D*/$1/
101デフォルトの名無しさん:2006/01/19(木) 18:57:20
s/.*?log:(\d+).*/$1/;
10299:2006/01/19(木) 19:15:12
>>101
なるほど!!
なんで気が付かなかったかな、・・・
103デフォルトの名無しさん:2006/01/26(木) 12:19:36
秀丸の正規表現を使って
先頭に#のついたコメント行と空白行以外を
正規表現でgrepしてマッチさせたいのですが

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

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

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

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

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

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

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

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

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

str.replace(/^\/?(.*?)\/?$/, "$1")
でうまくいった。
126デフォルトの名無しさん:2006/01/29(日) 23:17:46
解が複数ある場合、どれが選ばれるかという決まりは特にない。
ましてPerl互換のエンジンの場合は全ての解を求めない。
127デフォルトの名無しさん:2006/01/29(日) 23:29:54
で?
128デフォルトの名無しさん:2006/01/31(火) 12:34:39
/((それ)?で|だから(なに)?)\?/
とか言うやつは卑怯者
129デフォルトの名無しさん:2006/01/31(火) 17:32:48
>>128
それで?
だからなに?
130デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/01/31(火) 21:38:22
>>130
?が全角になってるから。
つまりもっと卑怯者
132デフォルトの名無しさん:2006/01/31(火) 23:16:47
後出しジャンケンとかマジかっけーし
133デフォルトの名無しさん:2006/01/31(火) 23:32:44
後出しじゃんけんで負けてる>>128
134デフォルトの名無しさん:2006/02/01(水) 09:49:54
喧嘩してーなら河原行ってこい
135デフォルトの名無しさん:2006/02/01(水) 21:21:21
\Aから始まって"で終わる文字列にマッチするにはどうしたらいいのでしょうか?
"/\\A[^\"]*\"/i"
にしてもマッチしませんですた
PHPでつ
136デフォルトの名無しさん:2006/02/01(水) 21:39:21
試してないけどエスケープが足りないんじゃないかな。 PCRE だよね?
"/\\\\A[^\"]*\"/i"
137デフォルトの名無しさん:2006/02/01(水) 23:55:12
ありゃ、知りませんですた。
基本のようですね、丁寧にありがとうございますた(;´Д`)
138デフォルトの名無しさん:2006/02/02(木) 09:44:43
必要ないなら ' にしとくとまだマシ
preg_ を " で書くと気が狂いそうになる
139デフォルトの名無しさん:2006/02/02(木) 14:09:07
Emacs Lisp の正規表現よりマシ。
140デフォルトの名無しさん:2006/02/02(木) 16:11:04
発言者「発言」

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

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

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

       ↑
      行末
164デフォルトの名無しさん:2006/02/05(日) 08:17:12
>>145
やったな、おい!大漁じゃねーか!
165デフォルトの名無しさん:2006/02/05(日) 12:01:19
行頭があれば行末もあるはずだよな
166デフォルトの名無しさん:2006/02/05(日) 12:43:38
と、思うでしょ
167デフォルトの名無しさん:2006/02/05(日) 15:14:31
同じ行に 「男」か「女」が順不同で含まれている行を検索するにはどう書けばいいの?
たとえばこんなのを全部検索したい
「男と女の〜」
「その女が男の〜〜」
168・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/02/05(日) 15:25:16
男.*女|女.*男
169デフォルトの名無しさん:2006/02/05(日) 17:19:26
これなら行頭があって行末
                の
                 無
                  い
        と 思 う の  文
       う         だ
      ろ          が
     だ           、
       う       実
         ど は 際
170・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/02/05(日) 17:36:45
神業的なリンケージリストの検出プログラム思い出した
171・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/02/05(日) 17:36:59
ループ検出
172デフォルトの名無しさん:2006/02/05(日) 17:42:43
>>171
1個進むのと2個進むやつ?
173・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/02/05(日) 18:10:41
それなんてアスキー出版局?
たしかそれ。
174デフォルトの名無しさん:2006/02/05(日) 19:10:19
>>170
どういうの?
後学のために教えてプリーズ
175デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/02/07(火) 22:59:14
Java使ったことないし、正規表現を知ったのが昨日という俺が適当に答える
import java.util.*;
import java.util.regex.*;
class a{
    static public void main(String[]args){
        ArrayList<String> list = new ArrayList<String>();
        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+"\"");
    }
}
180179:2006/02/07(火) 23:10:36
実は>>176が空白の扱いをどうしたいのか、
イマイチ分からんから適当に書いてるんで意図と違うなら指摘よろ
181デフォルトの名無しさん:2006/02/08(水) 00:32:26
>>176
Java はまったくわかりませんが、
>\+がうまくいかないです。
の参考になるかもしれないので、名前だけ Java に似てる JavaScript で書いてみました。

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

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

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

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

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

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

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

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

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

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

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














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

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

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

#実はもうちょっとだけありますが、後はこっちでやります。
188デフォルトの名無しさん:2006/02/08(水) 13:33:14
道場スレ落ちてるな
189176:2006/02/08(水) 16:04:38
ほんとに最後…
''の中に日本語・記号等全ての半角・全角文字を使えるようにするには
どうしたら良いでしょうか?3時間やりましたがダメでした…
\p{}でゴリゴリやるんでしょうか?
190デフォルトの名無しさん:2006/02/08(水) 16:23:16
>>189
空気嫁
親切にしてくれた人のこと考えろや・・・
191デフォルトの名無しさん:2006/02/09(木) 00:35:18
そういう面倒な感じなのは正規表現使わずに
地道にゴリゴリやりたくなる。
192デフォルトの名無しさん:2006/02/09(木) 01:10:14
おれはそういうのは正規表現だけで何とかならないか
タバコ吸いながらボーっと考えるのが好きだな
それで簡潔で美しいのが思いついたら
オレ脳内でオレが神になるその瞬間が好き
193デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/02/09(木) 16:03:50
196デフォルトの名無しさん:2006/02/09(木) 16:27:31
>>195
レスどもです
熟読してきます
197デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/02/09(木) 20:19:23
あ、しまった。もう見てないのね orz
199デフォルトの名無しさん:2006/02/09(木) 21:49:18
Visual Studioのテキストエディタの検索・置換で使う正規表現は
独特なので戸惑う。
\w とか .* とかは使えないし。
せめて.NetのSystem.Text.RegularExpressionsの正規表現が通るように
なればなあと。
200いいともの客:2006/02/09(木) 23:36:00
そうですねー。
201デフォルトの名無しさん:2006/02/09(木) 23:43:26
`ー' は要らないと思った。
202デフォルトの名無しさん:2006/02/10(金) 01:00:24
>>199
それ、VS 2005 でも改善されてないんだっけ?
203・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/02/10(金) 01:10:38
たしかATLの正規表現と同じような文法だったような(そのもの?)
204デフォルトの名無しさん:2006/02/10(金) 01:17:13
>>202
改善する気がないようです
205デフォルトの名無しさん:2006/02/10(金) 23:29:28
>>199の .* は .*? に訂正
206デフォルトの名無しさん:2006/02/13(月) 09:35:15
ちょっと具体的なサンプルが少ないようで残念

正規表現ポケットリファレンス
http://www.gihyo.co.jp/books/syoseki-contents.php/4-7741-2671-3
207デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/02/15(水) 13:33:27
こうじゃない?

(1[012]|0[1-9]):[0-5][0-9] (am|pm)
     ^^
209デフォルトの名無しさん:2006/02/15(水) 13:40:23
>>207
31:23 am のうち1以降がマッチしてるのでマッチした行が出力される
210デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/02/19(日) 02:38:09
つーかregexp関係で本買うなんて…
212・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/02/19(日) 02:47:32
「詳説 正規表現」は必読書じゃねーの?
いっぺん独自実装を試みたことがある。
213デフォルトの名無しさん:2006/02/19(日) 03:48:37
「オートマトン言語理論計算論」は必読書じゃねーの?
いっぺん独自実装を試みたことがある。
214デフォルトの名無しさん:2006/02/19(日) 08:29:07
ただ独自実装言いたいだけちゃうかとと言いたいだけちゃうかと。
215デフォルトの名無しさん:2006/02/19(日) 10:50:20
ちゃうちゃうちゃうんちゃう
216デフォルトの名無しさん:2006/02/19(日) 11:53:35
『詳説 正規表現』を不要だと言い切る人には出会ったことがないんだが
邦訳の曖昧さが気になれば原書当たればいいし
217デフォルトの名無しさん:2006/02/19(日) 12:06:15
は?
邦訳が曖昧な場合は得てして原文も曖昧。
文学作品じゃないんで。
218デフォルトの名無しさん:2006/02/19(日) 12:39:26
そうでもない
219デフォルトの名無しさん:2006/02/19(日) 13:08:26
>>217
あたまわるいなあ

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

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

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

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

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

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

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

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

my $str = "ABCDEFG{HIJ}KLMN{OPQ}RSTU";
my @m = $str =~ /(\{[^\}]+\})/g;
242236:2006/02/20(月) 03:11:09
>>241
教えてくれた通りで無事できました。
助かりました。どうもありがとうございました。
243デフォルトの名無しさん:2006/02/20(月) 17:43:37
>>242
(`・ω・´) いえいえ どういたしまして
244デフォルトの名無しさん:2006/02/20(月) 19:33:50
最近始めました。
わかんなかったらここで聞こうと思ってたけど、
案外簡単にできちゃうから聞くこと無いやw
245デフォルトの名無しさん:2006/02/20(月) 21:36:23
つーかregexpの本k
246pp:2006/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デフォルトの名無しさん:2006/02/22(水) 22:42:38
単なるセパレータとして使ってるだけじゃねーの
248デフォルトの名無しさん:2006/02/22(水) 22:44:15
> s/\([A-Za-z]\)\([']\)/\1>><<\2/g
ABC' => ABC>><<'

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

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

○ A' => A>><<'

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

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

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

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

}
269デフォルトの名無しさん:2006/03/03(金) 00:45:38
長く議論するほど扱いが難しいシロモノじゃないだろ。
続けるとしたら実装方式とかパッチの当て方とかそっち方面だな。
270・∀・)っ-○●◎- ◆Pu/ODYSSEY :2006/03/03(金) 00:46:38
そろそろ xpressive VS 鬼車
271デフォルトの名無しさん:2006/03/03(金) 09:50:44
>>269
誤爆?
272デフォルトの名無しさん:2006/03/03(金) 12:43:57
>>263
それなんてプロバイダ?
普通使えね?
273デフォルトの名無しさん:2006/03/03(金) 12:47:24
>>272
それなんてプロバイダ?
274デフォルトの名無しさん:2006/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=201.201.101.101
というログを標準入力として、以下の通り処理を流すと

while ($data = <STDIN>) {
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デフォルトの名無しさん:2006/03/08(水) 11:06:18
>>274
特に難しい機能を使っているわけでもないので一つずつ丹念に追えば
わかると思うが、これがさっぱりわからないんなら勉強が足りなすぎると
思われる。
276デフォルトの名無しさん:2006/03/08(水) 12:49:57
>>274
その気持ち悪い言語はもしや、Perlとか言うものか?
277デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/03/08(水) 19:54:39
my $services = {
ftpd => 21,
sshd => 22,
};

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

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

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

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

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

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

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

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

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

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

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

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

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

^hoge.*(?<!gz)\z
291286:2006/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 :2006/03/10(金) 23:12:44
ちょwwww
ものすごいバックトラックが起きそうですな。
293デフォルトの名無しさん:2006/03/10(金) 23:43:52
そのスパムフィルターなら正規表現使わなくてもできる
294デフォルトの名無しさん:2006/03/11(土) 01:29:31
>>291
その正規表現、笑える。
頭の中でオートマトンがマンダラを描いて今にも爆発しそうです。
295286:2006/03/11(土) 01:35:22
>>293
やはりそうですか...orz。
例えば一番始めに考えたのは、"^.*@hotmail\\.com$"を全部ゴミ箱に移して、
その後"^hogehoge@hotmail\\.com$"だけ救出するという馬鹿みたいな方法だったのですが、
これはいくらなんでも鈍臭い気がしまして。
スパムフィルターの件についてはくだ質に行ってみます。

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

>>292>>294
なんとなくサグラダファミリアのようなハノイの塔を想像しました。
296デフォルトの名無しさん:2006/03/11(土) 03:32:08
正規表現的には (?!)等が使えないなら遷移図から>>291をガリガリ算出するしかないと思う。
ただ、スパムフィルターという性質を考慮すれば「^([^h]|.[^o]|..[^g]|...[^e]).*@hotmail.com$」くらいで十分実用的じゃないかということでもある。
メーラ選んで>>293にするのが理想なんだろうけど。
あと最短一致程度なら利用できない場合の方が少ないんじゃない?
297デフォルトの名無しさん:2006/03/11(土) 03:39:34
要するに、ホワイトリストが使えないスパムフィルターなんか捨てちまえ、と。
298デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/03/11(土) 15:15:19
Emacs だと、繰り返しの {} にも \\ が必要。
\\{0,3\\} とか \\{5,\\} とか書けば使えるよ。
301286:2006/03/11(土) 15:53:42
おお、なにやら親切な方々が。
今ちょっと手が開きそうにないので、夜に確認してみたいと思います。
ありがとう、ありがとう。
302レベル5デス:2006/03/11(土) 16:16:03
×手が開く
○手が空く
303デフォルトの名無しさん:2006/03/11(土) 16:45:20
1.(?!\d000) だと半角数字1桁+000が続かないものって意味ですか?

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

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

でできるよ。


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

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

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

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

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

正規表現ケーススタディブック:
http://www.amazon.co.jp/exec/obidos/ASIN/4839913870/
321デフォルトの名無しさん:2006/03/14(火) 09:46:11
最近はいっぱい本が出てていいよね。

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

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

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

329デフォルトの名無しさん:2006/03/21(火) 21:06:30
 にんじん  200円<BR>
  はくさい  150円<BR>
  じゃがいも   300円<BR>

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

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

*nbsp;にんじん*nbsp;*nbsp;200円<BR>
*nbsp;*nbsp;はくさい*nbsp;*nbsp;150円<BR>
*nbsp;*nbsp;じゃがいも*nbsp;*nbsp;*nbsp;300円<BR>

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

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

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

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

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

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

の3つが主流になるのかな。まぁそれぞれ完全独立って
わけじゃないし、自分がメインで使うツールで勉強
すればいいんじゃないの?
350デフォルトの名無しさん:2006/03/24(金) 18:33:29
ECMAScriptや.NET準拠の正規表現
351デフォルトの名無しさん:2006/03/24(金) 18:55:25
それを言い出すと「おおざっぱに言うと」という前提が崩れる。
352デフォルトの名無しさん:2006/03/25(土) 00:01:57
----
<p>
    あいうえお
</p>
<pre>
かきくけこ
さしすせそ
</pre>
<p>
    たちつてと
</p>
----
こういう文字列を
----
    <p>
        あいうえお
    </p>
<pre>
かきくけこ
さしすせそ
</pre>
    <p>
        たちつてと
    </p>
----
perl5の正規表現で、このように<pre>要素以外をすべてスペースでインデントしたいです。<pre>要素は無いかも知れないし、複数あるかも知れません。

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

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

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

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

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

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

 __\n__\n<pre>\n__\n</pre>\n__\n__
.↑   ↑                    ↑   ↑
希望するインデントの挿入位置はここ

 __\n__\n<pre>\n__\n</pre>\n__\n__
.↑   ↑   ↑    ↑    ↑    ↑   ↑
mオプション付与時の ^ のマッチ位置はここ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

秀丸で作業するのを諦めるとか。
#例えば grep '^<dt>' でことが足りそうだ。
399デフォルトの名無しさん:2006/04/07(金) 15:18:39
^[^<]|^<[^d]|^<d[^t]
みたいですね。
どうもありがとうございました。
400デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/04/07(金) 23:50:44
ID:(キャプチャ)(入るかもしれない文字列)?<dd>
402デフォルトの名無しさん:2006/04/07(金) 23:51:47
^((?!<dt>).)*\n
403400:2006/04/08(土) 01:05:31
>>402
1つも引っかかりません
404デフォルトの名無しさん:2006/04/08(土) 01:25:24
402は>>392>>396宛だろう
間違ってるけどなw
405デフォルトの名無しさん:2006/04/08(土) 09:57:51
<dt>(.*) :<a href="mailto:(.*)"><b>(.*)</b></a>:(.*)ID:(.*)<dd>
406デフォルトの名無しさん:2006/04/09(日) 03:31:22
<TD><a href="/img/hogehoge.jpg" class="dl">hogehoge</a></TD>
みたいなHTML中の行から、/img/hogehoge.jpgだけ抜くには、どういうパターンにすればよい?

あちこちの正規表現解説サイト見たけど、具体例が少なくて理解不能。orz
具体例が多くて、馬鹿丁寧に解説してあるウェブページ無い?
407デフォルトの名無しさん:2006/04/09(日) 05:25:04
>>406
本当に必ずその例の通りと決まってるなら、
sed 's/[^"]*"\([^"]*\)".*/\1/'
408デフォルトの名無しさん:2006/04/09(日) 09:13:05
>>406から後出しが来る。間違いない。
409デフォルトの名無しさん:2006/04/09(日) 10:00:31
具体例が多くて、馬鹿丁寧に解説してあるウェブページ無い?
なんて文句が多いくせに自分の質問は思いっきり手抜きだからな
410デフォルトの名無しさん:2006/04/09(日) 10:04:47
その程度で具体例がないとわからない程度しか正規表現を理解してない
のはなにも勉強してないのと同義じゃないだろうか...
411デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/04/09(日) 11:13:27
line_stringsは捨ててるから、
href_link = line_strings.gsub(/.*href="(.*?)".*\n/i, '\1')
で十分。まだまだ修行が足りんな。
413デフォルトの名無しさん:2006/04/09(日) 11:15:16
どうでもいいけど、
>スタートキー押して
に思いっきり違和感。
414デフォルトの名無しさん:2006/04/09(日) 12:06:08
おまいの車にスタートボタン付いてないだけじゃ?
415デフォルトの名無しさん:2006/04/09(日) 12:08:07
イグニッション
416デフォルトの名無しさん:2006/04/09(日) 12:20:09
日本語の文字に対応した正規表現てないよね

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

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

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

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

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

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

だとmamaxがだめになるし。

後から攻めて

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

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

最近すぐに (?...) って出てくるからつまんなくてさ。
454デフォルトの名無しさん:2006/04/12(水) 11:00:05
ホント、つまらん奴だ空気嫁
455デフォルトの名無しさん:2006/04/12(水) 11:13:08
一般性のある正規表現、ってのがもう既にそこはかとなくナンセンス。
456デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/04/12(水) 17:07:50
/^.*\.html?$/
459デフォルトの名無しさん:2006/04/12(水) 17:13:12
正規表現的にはわかりました。ありがとうございます。
460デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/04/12(水) 17:39:31
>>460
4つだったら4x3x2x1=24書けば1つの正規表現になるな。
/(hoge.*hage.*page.*pyage|hoge.*hage.*pyage.*page|...)/
462デフォルトの名無しさん:2006/04/12(水) 17:49:01
それをさらにくくり出せるだろ。
/hoge.*(hage.*(page.*pyage|pyage.*page)|page.*(hage.*pyage)|...
463デフォルトの名無しさん:2006/04/12(水) 18:01:28
単語の増減や変更が頻繁にあるならえらいことになりそうな。

素直に正規表現の配列をループで回してマッチした方が良いような。
464デフォルトの名無しさん:2006/04/12(水) 18:16:21
あんまり正規表現使う意味が無いような
465デフォルトの名無しさん:2006/04/12(水) 18:17:32
>>464
じゃあ何を使って文字列マッチをするの? index() ?
466デフォルトの名無しさん:2006/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<a.length;i++)a[i]|=new Boolean(arguments[i+2])});
if(eval(a.join('*')))alert('ぜんぶめっけ♪');

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

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

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

<\!DOCTYPE[^>]*?>
492デフォルトの名無しさん:2006/04/22(土) 16:26:22
ごめん間違ってなかたt
493デフォルトの名無しさん:2006/04/22(土) 18:00:49
>>490
grepでやってみたけど改行が入ってるとマッチしない・・・
494デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/04/23(日) 01:54:06
START.*?\\s+m='([^']*)'.*?END
496デフォルトの名無しさん:2006/04/23(日) 02:25:02
htmlページ内の
平仮名を片仮名に変換するための正規表現を教えてください
497デフォルトの名無しさん:2006/04/23(日) 02:49:02
tr/あ-ん/ア-ン/
498デフォルトの名無しさん:2006/04/23(日) 03:14:31
>>493

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

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

[^オ]セロ

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

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

"<ul>\n<li>aaa\nAAA</li>\n<li>bbb\nBBB</li>\n</ul>".match(/<li>.*\n.*<\/li>/mg)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

a,1,!はそれぞれ適切な文字クラスに置き換えてくれ。
560デフォルトの名無しさん: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記号]*)$

う〜ん長すぎて気持ち悪いナァ
561558:2006/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デフォルトの名無しさん:2006/05/11(木) 17:36:10
勉強し始めたばかりの俺様が来ましたよ(つД`)


>>562

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

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

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

正規表現オブジェクトのコピーをする関数が見つからない
ソース文字列分だけコンパイルすればええんかアレ
572デフォルトの名無しさん:2006/05/12(金) 10:47:09
>>571
作者に報告 or patch の contribute よろ。
573デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/05/13(土) 12:36:05
>>575
>クラスオブジェクトに元の文字列を含めておいて、コピーコンストラクタで文字列をコピーする形にして
>その都度onig_newって手もあるんだけど、それって結構ダサい実装じゃね。

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

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

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


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

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

つ正規表現→字句文法
610デフォルトの名無しさん:2006/05/18(木) 10:36:26
時代的に多バイト文字を使ってもそろそろ許されると思うんだがな
611デフォルトの名無しさん:2006/05/18(木) 23:14:53
>>610
使うってどこに?
612デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/05/21(日) 17:54:11
>>615
変な正規表現…。
[¥w¥W] で「全ての文字」ってやりたいだけ。. でも良いのにね。
617デフォルトの名無しさん:2006/05/21(日) 17:55:50
>>616
おおっ、なるほど!!
即レスありがとうございました、助かりました(_ _)
618デフォルトの名無しさん:2006/05/21(日) 17:56:45
>>616
改行を含めたいからとか。俺もよく [\S\s] とかやる。
619デフォルトの名無しさん:2006/05/21(日) 19:37:21
普通 (?s:) か /s じゃないの?
620デフォルトの名無しさん:2006/05/23(火) 01:48:06
**さいたま
ぬおおおおおお!!

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

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

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

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

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

$hoge = "hehehehe";

hoge($hoge);

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

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

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

\x81^



\x81\^

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

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

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

お願い致します。

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

文中から1.と2.と3.のパターンをマッチさせたいのですが、どんな正規表現を用いたらいいのですか?
648デフォルトの名無しさん:2006/06/03(土) 01:54:19
<br>.*\(\d\.\d\d%\).*</td>
649デフォルトの名無しさん:2006/06/03(土) 10:18:21
>>648
なんか違わない
<font color=があるのと無い場合でマッチしないと思う
650デフォルトの名無しさん:2006/06/03(土) 10:48:02
>>649=647
「しないと思う」 じゃなくて 「しなかった」 だろ。
だって問題は<font color=じゃないからな。

ほらよ
<br>.*\(-?\d\.\d\d%\).*</td>
651デフォルトの名無しさん:2006/06/03(土) 10:55:56
>>649
12.53%とかはないのかな?
652デフォルトの名無しさん:2006/06/03(土) 12:45:53
<br>.*?</td>
653デフォルトの名無しさん:2006/06/03(土) 15:31:34
perlの正規表現では
/abc|def|ghi/
よりも
/abc/ || /def/ || /ghi/
の方が効率的だそうですが
何故ですか?
どちらも同じ効率のように見えるのですが
654デフォルトの名無しさん:2006/06/03(土) 16:01:20
>>653
後者は正規表現として扱う必要がないからindexとかstrpos的な処理に最適化される
655デフォルトの名無しさん:2006/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;}
こうやってもだめですた。
656655:2006/06/03(土) 22:06:09
まちがえた。
$str='((I)(have ((two) (children)))';だた。
657デフォルトの名無しさん:2006/06/04(日) 00:02:04
>>655
1 while $str =~ s/\(([^(]*?)\)/"[$1 ".++$num."]"/ge;

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

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

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

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

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

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

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

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

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

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

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

Amazon.co.jp:詳説 正規表現 第2版: 本
ttp://www.amazon.co.jp/exec/obidos/ASIN/4873111307/
高価で込み入った本なので半年単位で読み解くことを推奨

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

検索だけなら
/x[0-9]/
でできることは分かっているのですが・・・
716デフォルトの名無しさん:2006/06/07(水) 21:42:30
後方参照のしかたを調べろ
717デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/06/08(木) 10:08:00
717ですが、
(\w+\.)+(?!\w+=)だと、

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

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

(\w+\.)+で強欲マッチ? しているのいに、なんで「org」からが対象にならないのでしょうか?
719デフォルトの名無しさん:2006/06/08(木) 12:16:47
((\w+\.)+)=
720デフォルトの名無しさん:2006/06/08(木) 13:24:37
718です。
((\w+\.)++)(?!\w+=) で行けました。
ん〜正規表現は奥が深い
721デフォルトの名無しさん:2006/06/08(木) 15:15:48
後読み、先読みには、文字列の否定ができるのに、通常のグループ化ではなぜ否定ができないのだろうか・・・
(?<!regex) → ○
(?!regex) → ○
(!regex) → ×
722デフォルトの名無しさん:2006/06/08(木) 15:36:58
er又はelが文中につかない表現というのはできますでしょうか。
723デフォルトの名無しさん:2006/06/08(木) 16:20:58
! /e[r|l]/
724デフォルトの名無しさん:2006/06/08(木) 17:10:16
>>723
それはperlとかの話でしょ。
純粋な正規表現ではない。
        ~~~~
725デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/06/09(金) 10:51:02
>>722
これでいける。
^(.(?!el|er))*$
ただ先頭にelが付くとだめだけど。それ以外は問題なし。
正規表現の文字列否定は方実現手段がしょぼいからなぁ・・・
728デフォルトの名無しさん:2006/06/09(金) 10:56:18
正規表現以外を併用して抜き出したほうがおおむねわかりやすいな
729デフォルトの名無しさん:2006/06/09(金) 10:59:56
否定表現が難しい理論的な理由をひとことで説明できます?教えてきぼんぬ。
730デフォルトの名無しさん:2006/06/09(金) 11:24:25
図面が描けるかどうかでしょ。
731デフォルトの名無しさん:2006/06/09(金) 11:32:57
え?どゆこと?
732デフォルトの名無しさん:2006/06/09(金) 11:38:01
だから状態遷移図が描けるパターンは正規表現で必ず表現できるけど
否定の場合描けない可能性もあるわけで
733デフォルトの名無しさん:2006/06/09(金) 11:46:10
/*comment*/を削除することはできますが、

s/\/\*.*?\*\///g

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

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

s/\/\*(.*?)\*\//" " x length($1)/ge;
737デフォルトの名無しさん:2006/06/09(金) 13:11:57
>>736
すんません。自分javaです
738デフォルトの名無しさん:2006/06/09(金) 13:14:26
先に言ってくれ・・・
で、マッチした文字列の長さ分の空白文字を並べれば良いんじゃないの?
739デフォルトの名無しさん:2006/06/09(金) 13:15:43
あ、あと、Java だといくつも正規表現ライブラリがあるから、
そこまで申告しといた方が良いと思われ。
740デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/06/11(日) 04:31:44
splitで分割して、偶数番目の要素のみ置換した後、joinしてみては。
744デフォルトの名無しさん:2006/06/11(日) 11:27:23
>>742
先読みの類が使えれば簡単に書ける。perlならこう。PHPでどう書くかは知らない。

s/(?<!["\w])\w+(?!["\w])/replace/g

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

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

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

foo,bar

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

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

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

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

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

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

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

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

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

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

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

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

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

^[\x20-\x7e]+$

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

Subject: aaaa
 bbbb
 cccc

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

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

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

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

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

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

捨てざるを得ない
では?
770デフォルトの名無しさん:2006/06/21(水) 13:33:24
>>769
そういうつっこみはそのサイトの管理者に言えよ
771デフォルトの名無しさん:2006/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型を使うことになるので同じような状況で、同じよ
うな理由で失敗します。
772769:2006/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デフォルトの名無しさん:2006/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})?
775773:2006/06/29(木) 19:39:43
>>774
サンクス。
776デフォルトの名無しさん:2006/07/04(火) 06:15:14
正規表現と正規言語とは同じものでつよね。
正規言語は入れ子構造が許されないということですけど
正規表現では入れ子構造が表現できるではないでつか。
そこら辺どうなってんの。
777デフォルトの名無しさん:2006/07/04(火) 08:20:21
最初は正規言語族だったけど、
拡張しまくったらつきぬけた。
名前だけはそのまま残ってる。
778デフォルトの名無しさん:2006/07/04(火) 13:59:56
xyzzyの使い方が分からぬやし 励ましあえ その9
http://pc7.2ch.net/test/read.cgi/software/1143621919/
より誘導されてきました。

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

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

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

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

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

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

<input.*value=\"(.*)\" \/>

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

これだけでもいいんじゃないの?
793デフォルトの名無しさん:2006/07/07(金) 03:54:28
その場合は逆にvalue=を残したわけを聞きたいね
794デフォルトの名無しさん:2006/07/07(金) 19:50:44
>>793
>>790
>上記の value 部分だけを抽出したいのですが
795デフォルトの名無しさん:2006/07/07(金) 20:04:03
秀丸で動作させてたコードを意図の参考にするべきだろうな
ぶっちゃけ例でだけなら \"(.*)\"\/ で動作するわけだし
きっと他の部分でコレでは駄目な理由があるんだろう
796デフォルトの名無しさん:2006/07/07(金) 20:06:39
>>795
それじゃ type= も抜いちゃうじゃん
797デフォルトの名無しさん:2006/07/07(金) 21:42:01
正規表現自体は特に間違っていると思わないから
PHPのスクリプトのバグか
漢字のエンコード設定他でhogeの部分でのハングとか、そういう雰囲気
798デフォルトの名無しさん:2006/07/07(金) 21:45:34
>>794
>  上 記 のvalue部分
799デフォルトの名無しさん:2006/07/08(土) 03:59:23
>>790
使ってる関数はなに?
PHPにはPerl互換のやつとPosixのヤツがあるよ
これは微妙に動作が違う
実際に試して無いけど、Perl互換のヤツ使ってて / が正規表現の開始or終了にみなされてるとか・・・
とりあえずソース見せてよ
800デフォルトの名無しさん:2006/07/08(土) 04:01:35
Aに一致したらBに、A'だったらCに
といった置換は出来ますか?
801デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/07/08(土) 09:21:12
>>800
s/A'/C/g;
s/A/B/g;
803デフォルトの名無しさん:2006/07/08(土) 10:28:27
perlの正規表現が変なんだよ。perl方言と言うか。
804デフォルトの名無しさん:2006/07/08(土) 10:36:20
805デフォルトの名無しさん:2006/07/08(土) 11:27:37
自分が理解できないものを「変」に思うのは精神分裂症の兆候、
病院に急げ!
806デフォルトの名無しさん:2006/07/08(土) 12:02:59
そもそも、
803がこのスレのどの流れ、どのレスを受けての書き込みなのか、
わからないのだが。
807デフォルトの名無しさん:2006/07/08(土) 12:32:44
ふつうリファレンス省略されてれば直前を指す。
808デフォルトの名無しさん:2006/07/08(土) 13:01:35
>>802
s/(?:(A)|(A'))/(defined $1)? B: C/ge

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

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

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

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

とかいうどうでもいいところで工数を無駄に消費するのだった
825デフォルトの名無しさん:2006/07/11(火) 16:39:05
UnicodeはSJIS賀来町文字で何かと面倒
826デフォルトの名無しさん:2006/07/12(水) 11:37:24
VBscriptで | が使えないのですが、対象方はありますか?
827826:2006/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]<br>
状態: なし</td>
状態: 1991/03/26 [1-1]</small>
状態: 1988/03/28 [1-1] 1991/03/26 [1-5]</small>
状態: 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]<br> 1989/03/28 [1-5]</small>

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

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

>あああ
>
>いいい

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

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

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

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

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

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

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

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

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

>>848
すいません。
オライリーの正規表現の本とか買ってちゃんと勉強すれば
わかる事なんですよね。きっと。orz
850デフォルトの名無しさん:2006/07/16(日) 11:18:03
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デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/07/19(水) 15:13:20
すみませんが、教えてください。

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

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

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

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


<a href="./nikki.cgi?no=040101">2004/01/01</a>

というリストがあって、no=の後の番号を抽出したいのですが、
<a href="./nikki.cgi?no=(.*)">20ではうまく抽出できませんでした。
ご教授いただければ幸いです。
885デフォルトの名無しさん:2006/08/12(土) 22:50:51
とりあえず、?とか.はエスケープしとけよ。
886デフォルトの名無しさん:2006/08/12(土) 22:57:36
>>885
?を\?に変えたところ、うまくいきました。
ありがとうございます。
887デフォルトの名無しさん:2006/08/18(金) 13:34:24
888デフォルトの名無しさん:2006/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デフォルトの名無しさん:2006/08/18(金) 14:59:09
>>889
.*

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

関連サイト
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html

Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm

Regular Expression(Riue ちゃんの正規表現講座)
http://www.sixnine.net/regexp/

正規表現パズル
http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/

詳説 正規表現
http://www.oreilly.co.jp/books/4873111307/
906デフォルトの名無しさん:2006/08/24(木) 13:58:02
こっちは?

正規表現プログラミングFAQ
http://capslockabcjp.kitunebi.com/faq.html
907デフォルトの名無しさん:2006/08/24(木) 15:39:22
908デフォルトの名無しさん:2006/08/24(木) 19:14:16
>>891は用途によっては
255\.255\.1([6-8]\d|9[01])\.\d+
で十分実用的な気がする
909デフォルトの名無しさん:2006/08/24(木) 19:33:28
もうええちうねん
910デフォルトの名無しさん:2006/08/24(木) 19:39:37
255.255.160.0 MASK 255.255.224.0
REでないけど
911デフォルトの名無しさん:2006/08/24(木) 23:00:10
冥王星除外記念
/(([水金火木土]|[天海]王)星|地球)/
912デフォルトの名無しさん:2006/08/24(木) 23:04:37
一番外側の括弧いらなくね?
913デフォルトの名無しさん:2006/08/24(木) 23:06:46
ああ括弧外すの忘れてた
914デフォルトの名無しさん:2006/08/25(金) 05:47:54
セレスとか入んなかったの?
915デフォルトの名無しさん:2006/08/25(金) 07:47:04
>>914
入れる価値無し
916デフォルトの名無しさん:2006/08/25(金) 08:32:31
「冥王星を残すならケレスやカローンも入れよう」
「それはいやだから冥王星は惑星未満ってことで」
917デフォルトの名無しさん:2006/08/25(金) 09:15:33
衛星以上惑星未満
918デフォルトの名無しさん:2006/08/25(金) 10:17:18
矮惑星?
919デフォルトの名無しさん:2006/08/25(金) 12:12:28
矮惑星は惑星にあらず
920デフォルトの名無しさん:2006/08/25(金) 14:38:25
猥談やめろ
921デフォルトの名無しさん:2006/08/25(金) 16:23:39
水金地火木土天海
だと何かリズムが悪いよなぁ。
922デフォルトの名無しさん:2006/08/25(金) 18:33:51
「水金地火木土天海?」って疑問系にすればよい
923デフォルトの名無しさん:2006/08/25(金) 19:42:17
水金地火木土天海萌
924デフォルトの名無しさん:2006/08/25(金) 19:46:28
ホルストは先見の明があったな
925デフォルトの名無しさん:2006/08/25(金) 19:53:13
>>924
まだ冥王星は発見されてなかっただけ
926デフォルトの名無しさん:2006/08/25(金) 19:54:36
(´・w・)ウェ?
927デフォルトの名無しさん:2006/08/26(土) 18:11:26
小説正規表現ってみんな読んでるの?
928デフォルトの名無しさん:2006/08/26(土) 18:26:57
推理小説ですか?
929デフォルトの名無しさん:2006/08/26(土) 18:36:43
>>928
僕は友達からそういうのがあるって聞いただけなんだけど
とてもむずかしい話らしいよ
930デフォルトの名無しさん:2006/08/28(月) 07:13:12
なんだそれはw
931デフォルトの名無しさん:2006/08/28(月) 07:33:26
ttp://amazon.jp/o/ASIN/4873111307
小説 正規表現 第2版 (単行本)

これだな
932デフォルトの名無しさん:2006/08/28(月) 08:42:24
詳説か
933デフォルトの名無しさん:2006/08/28(月) 09:31:03
そういえばジェフェリーのブログで新しいのが出たとか言ってたような。
934デフォルトの名無しさん:2006/08/28(月) 14:07:10
×ジェフェリー
○ジェフリー
935デフォルトの名無しさん:2006/08/29(火) 02:43:10
>>933

Amazon.comのデータを見ると今月頭に出たみたい。
早速注文したが、到着予定が9/19。

それでも Amazon.co.jp経由で注文すると来月末になっちゃうから
ましっちゃまし。
936デフォルトの名無しさん:2006/08/29(火) 14:43:47
Perl6 の Rules とかに関する記述はあるのかな?
937デフォルトの名無しさん:2006/08/29(火) 21:38:52
abc という文字列にマッチしない正規表現って
/[^(abc)]/
じゃあだめ?
938デフォルトの名無しさん:2006/08/29(火) 23:02:17
だめ
939935:2006/08/30(水) 02:46:24
>>936

んーどうだろね。Perl 6のRules 自体が、ほぼfixされているとはいうものの
仕様が流動的だし。

とりあえず Amazonのページにある情報では分からんね。
regex.infoにもそれらしい情報はなし。

まあ届いたら報告しますわ。
940デフォルトの名無しさん:2006/08/30(水) 02:47:43
>>937

よく見る勘違いだけど、なんでそれでいけると思ったの?
941デフォルトの名無しさん:2006/08/30(水) 02:51:06
IPアドレスって判定するのも操作するのも面倒だな。
もうちょっとマシな表現にすれば良かったのに。
IPv6の::も面倒だ。
942デフォルトの名無しさん:2006/08/30(水) 03:10:20
>>941
IPv6 アドレスなんかは特に、正規表現で全部やろうって方が間違いでしょ。
943デフォルトの名無しさん:2006/08/30(水) 11:05:21
>>940
[^a] でaじゃない文字でしょ
(abc)でabcというグループでしょ
だから[^(abc)]でabcという文字(列)じゃない文字
と思った
944デフォルトの名無しさん:2006/08/30(水) 16:32:28
>>943
思ったとおりに物事がすすめば世の中平和さ
945デフォルトの名無しさん:2006/08/30(水) 16:43:37
>>943
/(?:(?!含ませたくない文字列).)*/
946935:2006/08/31(木) 02:03:09
なんかもう届いたよw

まだぱらぱらとしか見てないんだけど、ぱっと見増えているのは
PHPのpreg*の説明があるところ?

Javaのバージョン間での拡張の差とかもあるみたい。

で、残念ながら Perl 6に関する記述はない模様。

2nd ed.は行方不明なんで具体的にどう変わったか調べろというのは勘弁ね。
947デフォルトの名無しさん:2006/08/31(木) 08:40:01
>>945
それだと abc を仲間はずれにしたいとき
abcdef だと空文字列がヒットして
defabc だとdefがヒットするからダメだよ。
948デフォルトの名無しさん:2006/08/31(木) 15:54:36
>>945
テストしたらどんな文字列にもマッチするよ
949デフォルトの名無しさん:2006/08/31(木) 18:04:45
oniguruma + VC の話題ってここでおk?
950デフォルトの名無しさん:2006/08/31(木) 18:50:09
951デフォルトの名無しさん:2006/08/31(木) 19:00:31
>>946
Amazon の説明を見た感じだと、
あとは Ruby, MySQL あたりが追加と Java がより詳しくなったのが変更点なのかな?

個人的には、 Ruby の既存の Regexp と鬼車との違いなんかが載ってると嬉しいな。
952デフォルトの名無しさん:2006/08/31(木) 20:21:42
Regexは問題ありすぎ。
実はバックリファレンスの有無で文法が変わる。

http://capslockabcjp.kitunebi.com/faq.html#regex

鬼車で安定版が出てからが真打。
953デフォルトの名無しさん:2006/08/31(木) 21:12:33
>>952
「バックリファレンスの有無で文法が変わる」と問題「ありすぎ」なの?
954デフォルトの名無しさん:2006/08/31(木) 21:18:16
そう。ありすぎだろ。
(1+1)と1+1の結果が変わるようなら、言語として設計が変。
955デフォルトの名無しさん:2006/08/31(木) 23:25:02
Rubyは(1+1)と1+1の結果が違うのか。酷い言語だな。
956デフォルトの名無しさん:2006/08/31(木) 23:29:05
Rubynohanasinankasitenai
957935:2006/09/01(金) 00:48:22
>>951

えと、全部で章立てが十あって、JavaとかPHPは章がひとつ割かれているんだけど
RubyやMySQLはないっす。

索引を見てもRubyで引けるのは大して項目数がないし、
Onigurumaという項目もないから、ご希望のものは多分
載ってないんじゃないかなあ。

そもそもジェフリーが鬼車の存在を知っているのか疑問に思ったりw
958デフォルトの名無しさん:2006/09/01(金) 11:14:18
>>957
あらら、そうなんですか。残念・・・
959デフォルトの名無しさん:2006/09/03(日) 18:59:01
>>950
これ眺めてて思ったんだけど、正規表現ってどんだけ種類あるんだ?
POSIX
Emacs
grep
Java
Perl
Ruby
960デフォルトの名無しさん:2006/09/03(日) 20:09:56
>>959
挙げるだけ虚しくなるくらい無数にある。
961デフォルトの名無しさん:2006/09/03(日) 20:13:50
もうね秀丸とEclipseとsedで正規表現使うけどそれだけで嫌になる
特に参照パラメータとかね
962デフォルトの名無しさん:2006/09/04(月) 00:06:11
正規表現ってカップラーメンで言うとあれに似てるな
963デフォルトの名無しさん:2006/09/07(木) 05:03:47
Perl方式が主流になりつつあることに警告したい。
メニイコアの時代になれば探索の順序に依存する仕様が
並列化のネックになる。

POSIX化すれと言いたい。
964デフォルトの名無しさん:2006/09/08(金) 06:58:41
POSIXって言明あったっけ? あれがないと俺、生きていけない
965デフォルトの名無しさん:2006/09/08(金) 07:15:13
正規表現って方言あり過ぎ
どこが正規なの?
966デフォルトの名無しさん:2006/09/08(金) 08:24:46
方言はいろいろあっても正規文法を扱うところは同じじゃないのかな
967デフォルトの名無しさん:2006/09/09(土) 10:25:06
>>966
俺は>>965じゃないが、基本的にはそういうことだよな
ただ、現在のPerlやRubyなどの「正規表現」は拡張されまくった結果、
既に正規文法では表現できないものも表現できるようになってるが…
968デフォルトの名無しさん:2006/09/09(土) 18:28:43
次に示す四つの例で、全てのパターンにマッチするにはどうすればよいでしょうか?

1. href="..."
2. href='...'
3. href=...
4. href = ...
※4はイコール記号の前後に *いくつかの* スペース(タブも含む)があるとする

1〜2は「href=("|')」と表現することが出来ましたが、3〜4はどう表現したらよいか分かりません。
よろしくおねがいします。
969デフォルトの名無しさん:2006/09/09(土) 18:30:39
>>968
その前に、HTML的には 1. だけが正解
970デフォルトの名無しさん:2006/09/09(土) 18:46:32
XMLじゃなくて?
971デフォルトの名無しさん:2006/09/09(土) 18:48:20
href( |\t)*=("|'|)
972デフォルトの名無しさん:2006/09/09(土) 19:05:24
>>969
2.も正解。

>By default, SGML requires that all attribute values be delimited using either double quotation marks (ASCII decimal 34) or 
>single quotation marks (ASCII decimal 39).
>Single quote marks can be included within the attribute value when the value is delimited by double quote marks, and vice versa.
>Authors may also use numeric character references to represent double quotes (") and single quotes (').
>For double quotes authors can also use the character entity reference ".
973デフォルトの名無しさん:2006/09/09(土) 19:23:16
href *= *((['"]).*?\2|\S*)

=の途中にスペースが入るのはどうかと思う…。解釈してくれるブラウザはあるの?
974デフォルトの名無しさん:2006/09/09(土) 20:05:35
普通に空白文字を無視してリンク飛ばしてくれるぞ > 手元にあったIE6とFF1.5のどちらも

ダカラHTMLなんてパースしたくねぇ (;´д⊂)
975デフォルトの名無しさん:2006/09/09(土) 20:14:12
とりあえず、まずHTML標準に対応してから拡張を考えないか
976975:2006/09/09(土) 20:15:41
ごめん、読くみたら対応してた
977デフォルトの名無しさん:2006/09/09(土) 21:33:12
>>972
スマン 出展教えて
978968:2006/09/09(土) 21:41:47
皆さん、ご回答ありがとうございました。

>>969
言われる通り、二重引用符、または単引用符で括る約束ですね。
例外もありますが、XHTMLでは全て括る約束のようです。

つまり、仕様に基づいて(X)HTMLドキュメントを作成しない著者が多いので
こちとら正規表現に苦労しているわけです。(いや、冗談、これは私が悪い……)

>>977 仕様書じゃないかな?
979デフォルトの名無しさん:2006/09/09(土) 22:05:35
980デフォルトの名無しさん:2006/09/10(日) 14:50:26
バカの1つ覚えみたいに何でも正規表現でやろうとすると行き詰まる
981デフォルトの名無しさん:2006/09/11(月) 00:14:43
なんでもかんでも正規表現でやりたい派
982デフォルトの名無しさん:2006/09/11(月) 10:36:37
正規表現でできないのは努力が足りないから。
もっと精進すれば、必ずできると信じているから。
983デフォルトの名無しさん:2006/09/11(月) 11:42:42
何かの宗教だなw
984デフォルトの名無しさん:2006/09/11(月) 15:40:43
日経BP:「正規表現が広がる現状を、規制緩和を推進してきた立場から、
どのように感じているのか?

奥谷:「正規表現論は甘えです」

日経BP:真意を確かめようと質問を重ねると、奥谷は苛立った
    ように言葉を畳みかけた。

奥谷:「競争はしんどい。だから甘えが出ている。個人の甘えが、
   このままだと社会の甘えになる」
   「今の一致はほとんどが ”ぜいたく一致” 比較したい文字列と
   パターンが違うということを客観視できていない」
985デフォルトの名無しさん:2006/09/11(月) 16:08:36
>>968
もれがよく書く正規表現
つ m/href\s*=\s*(\'|\"|)(.*?)\1[\s>]/i
986デフォルトの名無しさん:2006/09/12(火) 00:52:36
>>983
君も今日からお仲間w
987デフォルトの名無しさん:2006/09/12(火) 03:47:45
俺なんか正規表現のお陰で彼女ができたぜ
988デフォルトの名無しさん:2006/09/12(火) 03:54:38
umeage
989デフォルトの名無しさん:2006/09/12(火) 23:46:46
990デフォルトの名無しさん:2006/09/13(水) 00:24:48
s/^99[\d]+(.*)//g
991デフォルトの名無しさん:2006/09/13(水) 08:31:50
1000だったら漏れ億万長者!
992デフォルトの名無しさん:2006/09/13(水) 09:30:10
残念
993デフォルトの名無しさん:2006/09/13(水) 15:23:09
9/√9=3
994デフォルトの名無しさん:2006/09/13(水) 15:24:03
1000は君に譲ろう。
995デフォルトの名無しさん:2006/09/13(水) 15:25:09
1000を取りたい者は俺を乗り越えて行け。
996デフォルトの名無しさん:2006/09/13(水) 16:15:59
9-√9=6
997デフォルトの名無しさん:2006/09/13(水) 16:19:06
すみません質問です
正規表現でaからzまでの文字を順に出力するにはどうすればよいですか?
たとえばperlで
@atoz = /hogehoge/;
としたら
$atoz[0] = 'a';
$atoz[1] = 'b';
$atoz[2] = 'c';
みたいになって欲しいのですが。
998デフォルトの名無しさん:2006/09/13(水) 16:23:28
$_ = 'abcdefghijklmnopqrstuvwxyz';
@atoz = /(.)/g;
999デフォルトの名無しさん:2006/09/13(水) 16:24:36
> $_ = 'abcdefghijklmnopqrstuvwxyz';

ここが反則です。
1000デフォルトの名無しさん:2006/09/13(水) 16:24:42
>>998
どうしても正規表現でやるのか…。
@atoz = "a" .. "z";
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。