正規表現 part 3

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん:2006/08/24(木) 19:06:29
とりあえずまだpart2が埋まってない
3デフォルトの名無しさん:2006/08/24(木) 22:10:05
Javaで文字列属性チェックに使ったら糞重かった。
"[A-Za-z0-9]*"でサクッと半角英数字チェックするだけなのに
'a' <= c && c <= 'z'とかで判定する方が10倍速かった。

うーん、スクリプトだから許容できるのが正規表現だとでもいうのか。
4デフォルトの名無しさん:2006/08/24(木) 22:24:37
もっと複雑な場合こそが正規表現の使いどころ。
5デフォルトの名無しさん:2006/08/29(火) 11:35:25
/.*/
6デフォルトの名無しさん:2006/09/09(土) 17:31:20
>>3
まあそんなもんだわさ
7デフォルトの名無しさん:2006/09/12(火) 00:58:15
前スレは1000盗り合戦会場
8デフォルトの名無しさん:2006/09/13(水) 00:09:49
infoseek
インフォ正規
インフォ精液
9デフォルトの名無しさん:2006/09/13(水) 13:51:04
aaa111bbb222
という文字列から
変数aに111を、変数bに222を
格納するようにするにはどうしたらいいですか
10デフォルトの名無しさん:2006/09/13(水) 13:55:11
"aaa111bbb222" =~ /\d+/
a = $&
でaに111は格納できたんですが
222も見るにはどうしたらいいですか
11デフォルトの名無しさん:2006/09/13(水) 14:02:05
>>10
Ruby なら scan を使うと文字列を逐次正規表現マッチできて便利だよ。

"aaa111bbb222".scan(/([a-z]+)(\d+)/).each { |key, val|
p [key, val]
}

ブロックの中は適当に料理してちょ。
12デフォルトの名無しさん:2006/09/13(水) 14:15:26
ありがとうございました。
a = Array.new
"aaa111bbb333".scan(/\d+/).each{|tmp|
a << tmp
}
てな感じで解決しました。ありがとうございました。
13デフォルトの名無しさん:2006/09/13(水) 14:23:21
a = "aaa111bbb333".scan(/\d+/)
14デフォルトの名無しさん:2006/09/14(木) 05:46:09
なんかスクレイピングとかリライトっぽい質問ばかりだな
15デフォルトの名無しさん:2006/09/14(木) 10:14:56
それ以外の質問をしなくては何か都合が悪いことでもおありで?
16デフォルトの名無しさん:2006/09/14(木) 12:07:26
わたしと正規表現とどっちが大事なの?

って言われたらどっちを選びますか?
17デフォルトの名無しさん:2006/09/14(木) 12:11:11
性器を選びます。
18デフォルトの名無しさん:2006/09/14(木) 13:06:04
jul8,jun1というような日付を
jul08,jun01のように前に0を入れたいのですが
これを正規表現で実現しようとすると
数字と文字を別々にマッチさせて
$10$2のように書くと、$10と解釈されてしまいます
エスケープは置換文字列では使えないようなんですが
何か良い方法はあるでしょうか?
19デフォルトの名無しさん:2006/09/14(木) 13:08:08
 
20デフォルトの名無しさん:2006/09/14(木) 13:18:27
実装言語は何かを言ってくれないと的確な回答はできないと思うのだが、
勘で "${1}0${2}" とか。
21デフォルトの名無しさん:2006/09/14(木) 16:31:08
最近みつけたけど、ここ、まあまあわかりやすい

ttp://ukiya.sakura.ne.jp/
22デフォルトの名無しさん:2006/09/14(木) 17:49:04
>>21
正規表現テスターをとりあえずダウンロードした。
23デフォルトの名無しさん:2006/09/14(木) 19:19:36
(?:$1)0$2
24デフォルトの名無しさん:2006/09/14(木) 19:21:58
>>23は勘違いです(´・ω・`)
25デフォルトの名無しさん:2006/09/14(木) 20:22:33
もともと
jul08,jun01
がまざってたら
jul008,jun001
ができる
26デフォルトの名無しさん:2006/09/14(木) 20:33:36
>>25
んなこたあない。
s/([a-z]+)(\d)\b/${1}0$2/g;
27デフォルトの名無しさん:2006/09/15(金) 00:41:30
>>20
>>25
>>26
なるほど、自分の勉強不足でした。
{
28デフォルトの名無しさん:2006/09/15(金) 01:13:44
Ruby互換のOnigurumaという正規表現エンジンを
TextMateというエディタから用いて変換していました。
日本語マニュアルがないため、置換文字列でどんな構文
があるかきちんと調べた事がなかったですが、今回気になって
調べてみると(?1:$1)0$2という置換文字列でうまくいきました。
Perlのやり方も凄く勉強になりました。
お騒がせしてすいません。
29デフォルトの名無しさん:2006/09/15(金) 06:52:33
$1\x30$2 なんて方法もある。
30デフォルトの名無しさん:2006/09/18(月) 00:12:48
青空文庫のルビを消したいのだが
《.*》
だと
朝の|挨《あい》|拶《さつ》を

朝の|挨が
になっちゃうわけです。同一行に《が二つ以上現れなきゃいいんだけれども
実際現れるから困る。知恵を貸して欲しい
31デフォルトの名無しさん:2006/09/18(月) 00:15:28
>>30
s/《.*?》//g;
「perl 最短一致」でググれ。
32デフォルトの名無しさん:2006/09/18(月) 00:25:23
サンクス!なるへそね。恩にきる
33デフォルトの名無しさん:2006/09/18(月) 18:29:26
行頭の1〜3文字目にスペース以外の文字がある行を
マッチささたいのですがどうしたらいいですか?
34デフォルトの名無しさん:2006/09/18(月) 20:01:13
/^([^ ]| [^]| [^ ])/とか、perlでif (/^.../ && $& =~ /[^ ]/)とか。
35デフォルトの名無しさん:2006/09/18(月) 20:27:32
/^.{0,2}[^ ]/
勿論 !/^ / とはマッチするものが違う
36デフォルトの名無しさん:2006/09/18(月) 20:29:29
>>33
Perlなら、

$str !~ /^   /

じゃダメなの?
37デフォルトの名無しさん:2006/09/18(月) 21:12:42
>>36
それだと空行や1個や2個しか文字が無い行もマッチするけどね。
38デフォルトの名無しさん:2006/09/21(木) 00:03:58
[\n][\n]*
この正規表現は、二つ以上の連続した改行文字(\n)にマッチしますが
\n と \nの間にいくつかの空白文字(半角スペース, タブ)がある場合にマッチする表現がわかりません。

一応「 [\n](|[\s]*)[\n] 」と書いてみたものの、思うようにマッチしません。
どう表現すればよいのでしょうか? よろしくおねがいします。
39デフォルトの名無しさん:2006/09/21(木) 02:26:10
>>38

で、何を使ってでそれをやろうとしているの?
\s とかあるからPerlかな?

マッチングに使っている部分全部さらしてみ。
40デフォルトの名無しさん:2006/09/21(木) 02:38:33
>>38
正規表現勉強しなおせ


/\n\s+?\n/
41デフォルトの名無しさん:2006/09/21(木) 03:41:31
オマエモナーw
42 ◆TWARamEjuA :2006/09/21(木) 19:15:26
s
4338:2006/09/21(木) 20:50:34
>>39
PHPのpreg()系です。

HTMLの<textarea>から</textare>に入力された文字から、連続した改行(=空行=)を取り除こうと思ったのです。
ただ、空行ではないけれど、改行と改行の間にスペース(タブも含む)がある行も取り除きたいのです。

これはどう表現すればよいのでしょうか?
当然ですがtextarea要素の内容は、全体を一つの文字列として扱うので「 ^$ 」という表現はダメでした。
44デフォルトの名無しさん:2006/09/21(木) 21:47:37
>>43
Rubyならhtmlパーサがあるから簡単に処理できるのだがな。
45デフォルトの名無しさん:2006/09/21(木) 23:00:15
>>43
> PHPのpreg()系です。

先に言えよ、ヴォケ!

$html = preg_replace_callback('{(?<=<textarea>)(.+?)(?=</textarea>)}si',
create_function('$matches',
'return preg_replace("/(?<=\\n)\\s*\\n/", "", $matches[0]);'), $html);
46デフォルトの名無しさん:2006/09/21(木) 23:11:48
題は空行削除であって、textatraタグは無関係でしょ
4745:2006/09/21(木) 23:43:23
>>46
ん?空行削除されてない?
48デフォルトの名無しさん:2006/09/22(金) 00:07:15
>>43
そんなときは、一度でやろうとせずに
まず 
「空白のみを含む行を削除」してから
「連続する改行を1改行に置換」するといいかもね。
49デフォルトの名無しさん:2006/09/22(金) 00:23:27
>>45
正規表現勉強しなおせw
50デフォルトの名無しさん:2006/09/22(金) 00:24:19
phpのeregで
@abc.gr.jp と @wxy-z.co.jp
以外のアドレスを拒否する場合
どうしたらいいでしょうか。
5145:2006/09/22(金) 00:47:13
>>49
コード出して指摘してくださいよ。
52デフォルトの名無しさん:2006/09/22(金) 01:59:16
>>43
ただのpreg_replaceでこんな感じでいけるだろ

/(^|\n)\s*(?:\n)/

あっちのスレで話題になってた各ブラウザの挙動がどうのは知らん
53デフォルトの名無しさん:2006/09/23(土) 08:29:03
Perlで、
 &gt; から &lt; に含まれる <br> のみ全て削除するにはどうすればいいでしょう?

$str =~ s/&lt;(.*?)<br>(.*?)&gt;/&lt;$1$2&gt;/g;
でやってみたのですが、<br>が複数ある場合ひとつしか削除できません。
いろいろ調べたんですが行き詰りました。
低レベルな質問かもしれませんがお願いします。
(文中の&は全角ですが実際は半角でやってます。)
54デフォルトの名無しさん:2006/09/23(土) 09:05:05
sub delbr {
my ($tmp) = @_;
$tmp =~ s/<br>//g;
return $tmp;
}
を用意した上で
s/&gt;(.*?)&lt;/delbr($&)/ge;
55デフォルトの名無しさん:2006/09/23(土) 17:59:43
エディタとかで検索や置換する程度なのですが、
正規表現だけで、Not条件を加えるのは無理なんでしょうか?

http://www.kt.rim.or.jp/~kbk/regex/regex.html#CCLASS
にあるような、よくある勘違いの例と同じなのですが、
ここで言うと[^foo]が"foo"以外では無く、fとo以外の一文字をあらわすのはわかります。

でも、それではその"foo"を全体を含まない文字列というのを
表現(追加)したい場合はどうすればいいんでしょうか?

"|"でorが出来るみたいにnotできたら簡単確実なのに、うまく除外するのに毎回頭を絞ってます。
検索等フロントエンドの実装で、否定条件指定のフィルタリングがある場合ならいいんですが…

例えば[^(giko|mike)]nekoみたいな感じで、簡単に文字列や正規表現全体を
否定(〜以外)できたらなにかと便利だと思うのですが、
それは正規表現の範疇外なのでしょうか?

うまくやる方法はありますか?
56デフォルトの名無しさん:2006/09/23(土) 18:26:40
(?!giko)(?!mike)(?=neko)
こうですか!? わかりません!

…原理はわからないが環境によっては動くな。おいおい勉強しまつorz
57デフォルトの名無しさん:2006/09/23(土) 18:39:05
AJAXでリアルタイムに正規表現チェックできるサイト
すごい便利。

Rex V: an AJAX Regular EXpression eValuator
http://www.rexv.org/

58デフォルトの名無しさん:2006/09/23(土) 18:46:54
>>55-56
何を何でやりたいのかはっきり書かないからレスがない。
59デフォルトの名無しさん:2006/09/24(日) 00:18:49
[^(foo)]
60デフォルトの名無しさん:2006/09/24(日) 10:55:50
>55

\b(?:(?!giko|mike)\w)+neko

とか、どうですか。
61デフォルトの名無しさん:2006/09/24(日) 11:06:49
([あ-ん]|あっ)*
62デフォルトの名無しさん:2006/09/24(日) 11:36:40
>>61
おまえのアヌスになど興味はない
63デフォルトの名無しさん:2006/09/24(日) 20:50:08
ワロタ
64デフォルトの名無しさん:2006/09/24(日) 22:59:48
* ←アナル
65デフォルトの名無しさん:2006/09/24(日) 23:18:17
 * ←アナル
ξ←ソフトクリーム

MS Pゴシックで見てね1
66デフォルトの名無しさん:2006/09/25(月) 00:05:06
    ∧_ ∧     ([あ-ん]|あっ)*
   (´∀` )
    (⊃⌒*⌒⊂)
     /__ノ''''ヽ__)
67デフォルトの名無しさん:2006/09/25(月) 20:11:30
<a href='javascript:window.open("http://hoge/page","f","width=460,height=400");void(0);'>javascript:window.open</a><br>
のようなリンクを
<a href='http://hoge/page'>javascript:window.open</a><br>
にするには
Obj.href.replace(/JavaScript:window.open\((\"?|\'?)(.*?)(\"?|\'?),?.*\);?(.*);?/ig,'$2')
ではうまくいきません。
よろしくお願いします。
68デフォルトの名無しさん:2006/09/25(月) 20:24:20
age
69デフォルトの名無しさん:2006/09/26(火) 18:09:05
Cソース中の2つのコメントの、「//・・・」と「/*・・・・・*/」を、空白に置き換えることは可能ですか?
置き換えるのは空白一文字ではなく、コメントになっている文字分空白にしたいです
70デフォルトの名無しさん:2006/09/26(火) 23:01:46
$text='</a></b>AIUEO</c>';
$pat='>(.*?)</c>';
if($text=~/$pat/) {
 print $1."\n";
}
else {
 print "ng\n";
}

AIUEOのみ抽出したいのですが、</b>AIUEOが返ってきます。
.*?は最短マッチのはずですが、なぜでしょうか?
71デフォルトの名無しさん:2006/09/26(火) 23:29:57
>>69
こういう例を考えると正規表現よりCでコード書いた方が早いと思うよ
printf("string//string"); // print

>>70
Perlでは一度成功したらそれでマッチが完了する
最短なのは .* に関してのみ
>([^<>]*)</c>
で望みのマッチをする
72デフォルトの名無しさん:2006/09/26(火) 23:39:31
>>70 おまえもしかして、あき?
7370:2006/09/27(水) 00:12:15
>>71
>Perlでは一度成功したらそれでマッチが完了する
これは前方から順に一致検索をしているとから、ということですか?
たとえば、
$text='</b></b>AIUEO</c></c>';
$pat='</b>(.*?)</c>';
の場合、$textの先頭側にある</b>と</c>に挟まれた文字列が抽出されてくるから、</b>AIUEOがマッチ。
もし後方から一致検索されていれば、AIUEO</c>がマッチするはずですもんね。

スマートな方法がなさそうなので([^<>]*)にしときます。
ありがとうございました。

>>72no
74デフォルトの名無しさん:2006/09/27(水) 12:03:56
#!/usr/bin/perl -p0777
BEGIN {
$COMMENT = qr{/\*.*?\*/};
$COMMENT2 = qr{//[^\n]*};
$DOUBLE = qr{\".*?[^\\]\"};
$SINGLE = qr{\'.*?[^\\]\'};
$OTHER = qr{[^"'/]};
}
s/($DOUBLE|$SINGLE|$OTHER+)|$COMMENT|$COMMENT2/$1/g;

詳説 正規表現がどっかにいってしまった
添削希望
75デフォルトの名無しさん:2006/09/27(水) 12:10:09
コメントを除去したいならプリプロセッサに通せば良いと思うんだ
76デフォルトの名無しさん:2006/09/27(水) 20:30:05
Javaで正規表現を入力チェックに使ってる人って居る?
速度はともかく開発効率がいいから、
決められたライブラリしか使えないときに便利なんだよね
77デフォルトの名無しさん:2006/09/27(水) 23:51:17
>>74
意外とシンプルにまとまるんだね
リテラルで"string\\"のパターンが来ると内外逆転するかな
やり方はいろいろあるけど qr{"(\\.|[^"])*"} とか
78デフォルトの名無しさん:2006/09/28(木) 00:21:03
>>76
GUIコンポーネントの入力チェックに使ったことはあるな
ああいうのは手でコーディングするのは苦痛なだけだから。
あと、入力チェックが必要になるようなGUIコンポーネントの場合、
入力は一般的に短いので、速度は問題にならないし
79デフォルトの名無しさん:2006/09/28(木) 07:56:20
ちょっと質問

<aaa>
<aaa>
<aaa>
<aaa>
<data1>xxxx</data1>
<data2>yyyy</data2>
</aaa>
</aaa>
</aaa>
</aaa>
こんな文字列があったとして
正規表現つかって一発で一番内側にある<aaa>
の内側の文字を取ってくることってできるんだろうか・・・・
可能か不可能かどうかも想像がつかない・・・orz
80デフォルトの名無しさん:2006/09/28(木) 09:04:06
>>79
できる。
81デフォルトの名無しさん:2006/09/28(木) 09:23:50
>>80
横からスマソ
へぇ〜
出来るんだ
これは俺もちょっと興味深い
82デフォルトの名無しさん:2006/09/28(木) 12:00:38
<aaa>(?!<aaa>)(.*?)</aaa>
83デフォルトの名無しさん:2006/09/28(木) 15:40:04
XMLを無理やり正規表現で扱うくらいなら
最初からXMLとして扱ったほうが楽なんじゃないの?
84デフォルトの名無しさん:2006/09/28(木) 18:50:49
長さ優先じゃなくて出現優先にすりゃいいだけだね
85デフォルトの名無しさん:2006/09/28(木) 19:22:59
>>80
入れ子処理だよね。正規表現第二版だと…

( )の入れ子の場合こうなっているから、
$LevelN = qr/ (?> [^()]+ | \( ??{ $LevelN }) \) )*/x;

えーと………

$LevelN = qr/ (?> [^(<aaa>|<\/aaa>)]+ | <aaa> (??{ $LevelN }) <\/aaa> )*/x;


……(<aaa>|<\/aaa>)の否定ってどうやるんだ?


後は任せた orz
86デフォルトの名無しさん:2006/09/28(木) 20:12:05
正規言語でない言語を正規表現で扱おうとするのはやめた方がいいんでないかと
いや、今の「正規表現」が厳密には正規表現じゃないのは知ってるけど、やっぱり
無理やり拡張したため、無理が出てると思うんだ
87デフォルトの名無しさん:2006/09/29(金) 00:07:24
別に拡張表現使わなくてもできるけど。
/(<aaa>)*(.*?)<\/aaa>/
88デフォルトの名無しさん:2006/09/29(金) 01:50:24
バックトラックしまくりそうだけど。一応。

(<aaa>.*)*<aaa>(.*?)<\/aaa>

Perlなら、(<aaa>.*?)*<aaa>(.*?)<\/aaa>
でもイケた。
89デフォルトの名無しさん:2006/09/29(金) 04:41:56
>Perlなら、(<aaa>.*?)*<aaa>(.*?)<\/aaa>
Perlなら、{(?:<aaa>.*?)*<aaa>(.*?)</aaa>}m
90デフォルトの名無しさん:2006/09/29(金) 10:15:22
1. Function
2. End Function
3. Exit Function
上記で1だけを検索したい場合どうすればいいでしょうか?

↓ではだめでした
 (?<!(Exit|End))\s*Function

91デフォルトの名無しさん:2006/09/29(金) 10:20:41
>>90
^Function$
でいいんじゃね?
92デフォルトの名無しさん:2006/09/29(金) 10:39:03
>>80->>89
トンクス!
もらった情報でなんとかなったさ〜!
ソフトでガリガリ解析するのがたまらなかったんで・・・

ちなみにXML解析じゃぁないんだけどね(^^;
俺ももっと勉強しなきゃ・・・だなぁ(;´Д`)

もっと頭やわらかくする必要がありそうだorz
93デフォルトの名無しさん:2006/09/29(金) 10:43:36
>>90
(?:^|[^dt\s]|(?:^|[^n]|(?:^|[^E])n)d|(?:^|[^i]|(?:^|[^x]|(?:^|[^E])x)i)t)\s*Function

オレならFunctionでマッチさせてマッチ位置もらってからEndかExitが前に
ないことを別途調べるな。否定と正規表現は相性悪い。

94デフォルトの名無しさん:2006/09/29(金) 10:45:47
パーサ書いた方が実装容易で見通しも保守性も拡張性もあって良いような気がする漏れは失格ですかそうですか。
95デフォルトの名無しさん:2006/09/29(金) 11:06:53
タグ系はXPathでええやん
96デフォルトの名無しさん:2006/09/30(土) 02:44:00
>>94
俺も同じこと思った。あと、XMLだとそもそも既存のパーサがあるのに
何故それを使わないで正規表現で済まそうとするのかと。あと、ある要素
取り出すだけなら、>>95の書いているようにXPath使う手もあるな
97デフォルトの名無しさん:2006/09/30(土) 06:37:14
アクセスログから検索ワードを抽出するのを試みたいんだけど、
色んな検索エンジンや仕様があって把握しきれません
まとめたサイトみたいなものはありませんか
98デフォルトの名無しさん:2006/09/30(土) 11:41:39
>>97
>>1

何のためのテンプレよ。
99デフォルトの名無しさん:2006/09/30(土) 13:37:17
perlの
(?{ code })
Perlにおいて、埋め込まれたPerlコードを実行します
(??{ code })
Perlにおいて、埋め込まれたPerlコードを実行してその結果を正規表現を表すものとして使用
ができる、windows用の置換ツールってありますか?
100デフォルトの名無しさん:2006/09/30(土) 14:03:11
何に使うの?
101デフォルトの名無しさん:2006/09/30(土) 14:08:17
>>99
Perl
102デフォルトの名無しさん:2006/09/30(土) 19:01:09
bbbにマッチさせるにはどうすればよいでしょう?
ただし、次のように、bbbが<x>と</x>に囲まれている場合は除きます。
また、aaa,bbbは0個以上の任意の文字列とします。
言語はrubyです。

<x>aaabbbccc</x>

自分でやってみた結果はこうです。

/(?!<x>.*)bbb(?!.*<\/x>)/

これでうまくいっているように見えますが、
他に書き方があればよろしくお願いします。
103デフォルトの名無しさん:2006/09/30(土) 19:03:35
>aaa,bbbは0個以上の任意の文字列とします。

aaa,cccは0個以上の任意の文字列とします。
でしたorz
104デフォルトの名無しさん:2006/09/30(土) 19:14:42
思うんだがなんで自分でパーサ書かないのかな?
XMLだとタグが1行におさまっているとは限らないわけで

<x
>
aaabbbccc
</x>

とかも考えられるでしょ?
そんなのを正規表現でやる方がおかしい
105デフォルトの名無しさん:2006/09/30(土) 19:22:09
確かにブランクの扱いに特徴のあるものは正規表現に向いてないな。
106デフォルトの名無しさん:2006/09/30(土) 20:00:16
タグは必ず1行におさまります。個人的に利用してるデータで、XMLとかじゃないんですよ。
なので、実は括弧は目印にすぎませんから、形式は何でもいいんです。
ただ、マッチした部分を括弧で囲みたいわけです。しかし、すでに括弧で囲まれている場合は、
不要なんです。入れ子にしたくないわけです。
107デフォルトの名無しさん:2006/09/30(土) 20:34:17
>>106
「括弧」って何の話?
108デフォルトの名無しさん:2006/09/30(土) 20:46:18
require 'html'
html = HTMLtokens.new('ファイル名l')
html.between("x") { |i| html.tokens[i] = html.tokens[i].gsub(/b+/, 'c') }
109デフォルトの名無しさん:2006/09/30(土) 20:49:14
まあそれでも<x>aaaa¥<bbb</x>とかではまったりするわけよ
正規表現にふさわしくない題材だと思うね
110デフォルトの名無しさん:2006/09/30(土) 20:51:18
テンプレサイトに置いてるHTMLパーサ使えば、
広告のカットやテーブル項目の並び替えとかスクリプトからできるんだが。
マニュアルが無いせいなのかな。
111デフォルトの名無しさん:2006/09/30(土) 20:56:49
XMLを正規表現でやるのはやっつけ仕事の時だけ
112デフォルトの名無しさん:2006/09/30(土) 20:57:56
正規表現の実装というと、やっぱりPerlが基準になるのか?
あまりいいたくはないが、「Perlの正規表現に準拠」ってなるのか。
Perlから正規表現の道に入ったからさ。
113デフォルトの名無しさん:2006/09/30(土) 21:00:27
POSIXが基準だろ。
漢字が扱えるのでPOSIXなのはboostだと思う。
114デフォルトの名無しさん:2006/09/30(土) 21:30:50
ふ〜ん。たんくす。
115デフォルトの名無しさん:2006/09/30(土) 21:37:12
>>109
というか、何でもかんでも正規表現で扱えるわけじゃないというのを
知らない奴が多過ぎる。自分の周りでもXMLのパーサを一生懸命
正規表現で書こうとしてる奴がいたりして、辟易する
116デフォルトの名無しさん:2006/09/30(土) 21:38:55
汎用的なトーカナイズパーサーが無いからじゃねーの?
117デフォルトの名無しさん:2006/09/30(土) 21:41:18
XMLパーサはライセンスと段取りのメンドさが問題だろ。

あとWEB上のルールのいいかげんなHTMLの処理も出来ないから、
例えばショップのWEBページから価格を吸い出して
XMLに保存という時にも困る。
118デフォルトの名無しさん:2006/09/30(土) 23:37:56
>>114
納得すんなよ
119デフォルトの名無しさん:2006/10/01(日) 00:37:01
>>114
Perlの正規表現はPOSIXのそれを超えている。
120デフォルトの名無しさん:2006/10/01(日) 00:45:58
Perlの正規表現の欠点は

・仕様の合わせ込みが厄介なこと、
・DFAのエンジンとの親和性が低いこと
・コストの計算が難しいこと(計算量の爆発の予測しにくい)
・最短の一致を見つけるのが遅くなる(ifの条件式とかは別に最短でも成立する)

原因は縦型探索で比較の順序の影響を受けることにある。
121デフォルトの名無しさん:2006/10/01(日) 01:12:01
c++0xのregexのドラフトには、POSIXの他ECMAScript準拠の正規表現も
盛り込まれてる。
最初の版だとPerl準拠のもあったんだけど、削除されてしまった。
122デフォルトの名無しさん:2006/10/01(日) 01:18:43
あと、将来的にメニイコアでスレッド立てまくりな環境になった場合、
POSIXだと完全な最長一致だから並列実行で設計できるが
Perl式だと互換性のすり合わせが難しくなるだろ。
(最初に見つけた結果で探索を打ち切るのだがその順番が)
123デフォルトの名無しさん:2006/10/01(日) 01:28:31
>>118-119
やっぱりPerlは詰め込み杉ってところだよね。
最近では、java.util.regex をよく使ってる。
javascriptだとブラウザ対応でどこでも動くから、
javascript の正規表現を知っておくと良さそうだね。
メジャーな実装としては、perl, ruby, javascript (java, c$)ってところかな?
ありがとね〜
124デフォルトの名無しさん:2006/10/01(日) 13:10:09
>>111
>XMLを正規表現でやるのはやっつけ仕事の時だけ

それって某社の取締役最高技術責任者のこと?
125デフォルトの名無しさん:2006/10/04(水) 13:28:03
0〜100までしか入力できないようにする方法ありますか?
126デフォルトの名無しさん:2006/10/04(水) 17:18:08
言語を教えろ、言語を。
127デフォルトの名無しさん:2006/10/04(水) 17:35:35
/^(100|[1-9]\d|\d)$/
128デフォルトの名無しさん:2006/10/04(水) 21:05:15
if文でゴー!
129デフォルトの名無しさん:2006/10/10(火) 10:28:06
a-z A-Z 0-9 のように全角記号を始点から終点で指定するには?
130デフォルトの名無しさん:2006/10/10(火) 11:54:44
>>129
全角記号の定義とエンコードによってまちまちなんでね?
131デフォルトの名無しさん:2006/10/10(火) 22:37:50
132デフォルトの名無しさん:2006/10/10(火) 22:53:33
>>131
あとついあったよね、会談。
はずしてやんの。
133デフォルトの名無しさん:2006/10/10(火) 23:03:19
占星術は統計学なんだから、断言してる時点で詐欺師
134デフォルトの名無しさん:2006/10/11(水) 00:11:47
>>132



???
135デフォルトの名無しさん:2006/10/11(水) 12:28:34
>>130
unicode

つか、それぞれのエンコードの定義マップ見たらいいわけ?
136デフォルトの名無しさん:2006/10/11(水) 17:12:53
HTMLのソースから任意の拡張子ファイルにリンクしているサムネイル画像のURLを
取得したいのですが、どういう正規表現で可能でしょうか?

具体的には例えば

 <a href=xxx.mpg><img src=/image/zzz.jpg></a>

このようなものから/image/zzz.jpgを抜き出したいのです。

WEB巡回する用途なので、コロンやらパスやらのフォーマットは
多様なものに対応したいと思っています。言語はPHPです。
137デフォルトの名無しさん:2006/10/11(水) 18:37:03
迷惑スクレイパー
138デフォルトの名無しさん:2006/10/12(木) 02:14:12
行の2〜4桁目が3a1以外と3a3以外がある行を見つけるには
どのようにしたらいいでしょうか?
139デフォルトの名無しさん:2006/10/12(木) 05:14:06
grep -v '^.3a[13]'
140デフォルトの名無しさん:2006/10/12(木) 10:15:40
マッチさせたい文字
aaa xxx
bbb
マッチさせたくない文字
aaa xxx
yyy
bbb

perlのマルチラインモードで「aaa.*?$^bbb」でいけると思ったのですがだめでした。
上記の条件にあう正規表現を教えてください。
141デフォルトの名無しさん:2006/10/12(木) 15:38:35
(?<=yyy)bbb
142デフォルトの名無しさん:2006/10/12(木) 20:11:01
>>141
すいません。
yyybbbにもマッチさせないです。
というか、正規表現のマルチラインで
改行を、$^で指定できないのでしょうか?
143デフォルトの名無しさん:2006/10/12(木) 20:28:19
改行文字書いちゃえば?
/aaa.*¥nbbb/;
144デフォルトの名無しさん:2006/10/13(金) 03:19:28
一度"\n"でjoinして
/aaa([^\n])\nbbb/
でいいんじゃないか?
145近藤雅彦:2006/10/13(金) 11:18:33
マッチさせたい文字
aaa xxx
bbb
マッチさせたくない文字
aaa xxx
yyy
bbb

無理
bbbはどうすんのさ
146近藤雅彦:2006/10/13(金) 11:19:29
なんだ改行ありかよ
否定先読みでも使っとけ
147デフォルトの名無しさん:2006/10/13(金) 11:36:46
何を前提にしているのかよくわからんが、perlのmは、

^が改行の直後にもマッチ
$が改行の直前にもマッチ

するようになるだけ。したがって$^で改行それ自体を指定する
ということにはならない。

143のいうように普通に\nとして書け。
148デフォルトの名無しさん:2006/10/13(金) 13:28:10
if (aaa == bbb) {
xxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx
}

xxxの中に、hogeが一切どこにも入らない if () { .... } を検索したいのですが、
perlの正規表現でできますか?
149近藤雅彦:2006/10/13(金) 17:01:47
>>148
否定先読み
150デフォルトの名無しさん:2006/10/13(金) 20:53:44
>>149
できない!
M/if[^}]*(?!hoge)}/m
151デフォルトの名無しさん:2006/10/13(金) 21:41:48
<b>(.+?)</b>

みたいな正規表現を見かけたのですが、

.+? ってどうして
.+ じゃいけないんですかね
152デフォルトの名無しさん:2006/10/13(金) 21:49:03
>>151
<b>...</b>...<b>...</b>
の外側の<b>〜</b>にマッチしてしまったりするから
153デフォルトの名無しさん:2006/10/14(土) 16:34:24
>>150
>>1
の内容を理解してない低脳だから
154デフォルトの名無しさん:2006/10/14(土) 20:48:54
学び始めたばっかいまいち解っていないのですが、2chのようにhttpが書かれたら
リンクをつけたいのですが、どうしても上手くいきません。
単に正規表現が間違ってるだけかと思われるのですが、
普通、httpにリンクをかける場合どのような正規表現をもちいればいいのでしょうか?
今、phpでpreg_match('/^http://+[a-zA-Z0-9\.\-\=\/\%\$\?\&\_]$'、$a)のような
変な書き方をしているですが、どうかよろしければ正しい方法を教えていただけないでしょうか?
155デフォルトの名無しさん:2006/10/14(土) 23:03:35
>>153
難しくてわからないんだよぉ〜。
どうしてもifから}間での間に文字が入らないの先読み否定がうまくできない・・・
156 ◆TWARamEjuA :2006/10/15(日) 00:32:11 BE:1089252-BRZ(6667)
https?://\S+
なんてどうかしら?
157デフォルトの名無しさん:2006/10/15(日) 02:33:45
>>156
www.hoge.comですよ
の ですよ もひっかからね?
158デフォルトの名無しさん:2006/10/15(日) 04:40:33
>154
googleで「URLの正規表現」を検索すれば
159 ◆TWARamEjuA :2006/10/15(日) 09:24:22 BE:2614346-BRZ(6667)
>>157
そういうのは引っかからないで欲しいですよね。
www.hoge.com/search.php?query=ですよ
こゆのは引っかかって欲しいですよね♪

URI(URL)の正規表現なんて、どこまでを通すか通さないのかのさじ加減が難しいのかと思うのですです。
160デフォルトの名無しさん:2006/10/15(日) 09:54:53
一般的に考えてURLの末尾には改行かスペースが入るだろう。
wikipediaへなんかのリンクだと日本語も使われるので、それは引っ掛けてほしいところ。
161デフォルトの名無しさん:2006/10/16(月) 13:53:14
http://72.14.203.104/
なんてね
162デフォルトの名無しさん:2006/10/18(水) 00:01:02
>>159
安易に
https?://[!-~]+[=\?&]?\S+
日本語の前に来る記号にどんな種類があるか知らないけど w
163デフォルトの名無しさん:2006/10/18(水) 20:04:42
if(/○○○/../□□□/)ってどういう意味?
164デフォルトの名無しさん:2006/10/18(水) 20:39:03
○○○が含まれるものから、□□□が含まれるものの間は真ってことじゃないのかな?
165デフォルトの名無しさん:2006/10/18(水) 23:11:32
オライリーの「正規表現」に
URLにマッチする正規表現が載ってなかったっけ?
166デフォルトの名無しさん:2006/10/18(水) 23:27:45
あるけどあんまり好きじゃないな、あのやり方・・・
167デフォルトの名無しさん:2006/10/19(木) 16:26:13
168デフォルトの名無しさん:2006/10/20(金) 18:30:29
asdf
asdfasdf
asdfasdfasdf

一行目の asdf だけに一致させたい場合
どうすればよいのでしょうか?
169デフォルトの名無しさん:2006/10/20(金) 18:50:51
^asdf$
170デフォルトの名無しさん:2006/10/20(金) 19:20:33
>>169
アリガd
171デフォルトの名無しさん:2006/10/24(火) 02:14:14
perlの正規表現で (a|b) と ([ab]) にパフォーマンスの差はありますか?
(a|b|c) と ([abc]) の場合はどうでしょう?
172デフォルトの名無しさん:2006/10/24(火) 09:35:56
>>171
文字クラスで十分なときは文字クラスの方が速いらしいが
気になるならベンチとって確認しろ。
173デフォルトの名無しさん:2006/10/25(水) 17:04:24
RUBYで、
str = ["<あ>-<#>-<い>--<#>-<1>-<2>-<#>-<x>-<y>"]

という形があるとして、
一番後ろの<#>から後ろ(<x>-<y>)を抜き出すにはどうすればいいですか?
174デフォルトの名無しさん:2006/10/25(水) 18:04:57
str[0].rindex(/<#>-/) && $'
str[0].scan(/<.>-<.>/)[-1]
str[0].scan(/<#>-([^#]+)\Z/)[0][0]
175173:2006/10/25(水) 18:56:51
>>174
参考になります。
ありがとうございます。
176デフォルトの名無しさん :2006/10/26(木) 02:20:08
正規表現と聞いて「性器表現」と連想してしまうのは俺だけ??
177デフォルトの名無しさん:2006/10/26(木) 05:32:25
うん
178デフォルトの名無しさん:2006/10/26(木) 06:14:22
>>176
心配すんな正常だ
179デフォルトの名無しさん :2006/10/26(木) 14:32:10
性器表現・・・どんな演算子があるんだろ。萌
180デフォルトの名無しさん:2006/10/26(木) 16:19:38
preg_match("/docomo\.ne\.jp$/",$host)

これでdocomo.ne.jpがひっかからないのですが
どうしてでしょうか?
181デフォルトの名無しさん:2006/10/26(木) 16:59:45
マルチウゼェ。
182180:2006/10/26(木) 17:01:35
申し訳御座いませんでした。
183デフォルトの名無しさん:2006/10/26(木) 17:50:38
>>179
*ってよく使うよ。


   ∧_ ∧
  (´∀` )
    (⊃⌒*⌒⊂)
     /__ノ''''ヽ__)
184デフォルトの名無しさん :2006/10/26(木) 23:50:28
>>179
まあ♂♀はあるだろうな。。。
185デフォルトの名無しさん:2006/10/27(金) 00:53:54
^[ちま]んこ$
186デフォルトの名無しさん:2006/10/30(月) 20:50:52
Perlの掲示板スクリプトでタグが入力されたとき、
<em><q>text</em></q>
のように要素が重なり合ったときにエラーを返すようにしたいんですが、
どうすればいいか教えていただけませんか?
187 ◆TWARamEjuA :2006/10/30(月) 22:37:59 BE:1961429-BRZ(6667)
>>186
かーなーりすれ違い♪
HTML-lintに通すと良いかも♪
188デフォルトの名無しさん:2006/10/31(火) 19:03:40
"o:\\Desktop\\test\\test1\\ttea\\tarachan.txt"

この形式からtarachan.txtの入っているフォルダ名を得るにはどう記述したら良いのでしょう。
189デフォルトの名無しさん:2006/10/31(火) 19:24:27
自己解決しました。
最良かどうかは解りませんが/(^\".*?\\.*?)[^\\]*?\"/で出来ました。
190デフォルトの名無しさん:2006/10/31(火) 19:27:55
連投すいません
/(^\".*?)[^\\]*?\"/
でも大丈夫なようですね。
191デフォルトの名無しさん:2006/10/31(火) 21:04:11
_splitpath使った方が早いような。
192デフォルトの名無しさん:2006/10/31(火) 21:35:23
>>186
念のため聞いておくが、そのような記述が必ずしもHTMLの仕様に逆らってはいないことを知っての上でそうしたいんだな?
193デフォルトの名無しさん:2006/11/01(水) 11:06:29
linuxのnmap見たいなツールで、windows用のGUIツールありますか?
テストサーバでオープンになっているポートを知りたいのですが。
194nobodyさん:2006/11/01(水) 18:28:29
このような正規表現 [a-zA-Z0-9.]+ で
アルファベットおよびアルファベット+数字で構成された語句を抜き出し
ているのですが、数字だけのものも抜き出してしまいます。
年度など、数字だけで構成されているものを除外するにはどうすればいい
でしょうか?
どうもうまくいかないもので。よろしくお願いします。
195デフォルトの名無しさん:2006/11/01(水) 18:32:52
>>194
その正規表現で動いたら奇跡だな。

[a-zA-Z][a-zA-Z0-9.]*
196194:2006/11/01(水) 18:49:30
>>195
動いてますよ。文字は全て全角なので。(ちょっとわけありで)
その上で、数字だけを除外するにはどうすれば良いのか、お聞きした
いのです。
197デフォルトの名無しさん:2006/11/01(水) 18:51:10
それだと数字から始まるものはマッチしなくね?
[a-zA-Z0-9.]*[a-zA-Z][a-zA-Z0-9.]*
こんなのかな
198194:2006/11/01(水) 19:04:08
>>197
それがマッチするんですよ。こんな感じに
Array ( [0] => 2005 [1] => IEEE1394 [2] => 24 [3] => Index
[4] => Java [5] => API [6] => JMF [7] => USB2.0 )
それで、困っておるわけです。
199デフォルトの名無しさん:2006/11/01(水) 19:17:50
>>198
>>196で答え出てるよ。
200199:2006/11/01(水) 19:18:44
>>195だった・・
201デフォルトの名無しさん:2006/11/01(水) 19:21:10
>>199
それの不十分さを>>197が補正してるんだな。
202194:2006/11/01(水) 19:25:35
>>200
195,197の正規表現は試してみましたが、動きませんでした。
PHPのなかで使ってるからだろうか・・?
203デフォルトの名無しさん:2006/11/01(水) 19:30:22
>>195
お前ら.のエスケープ忘れてる。
204194:2006/11/01(水) 19:33:43
>>197
ご無礼をいたしました。普通に動きました。ありがとうございます。
205194:2006/11/01(水) 19:42:14
あと、後学のために、[a-zA-Z]と[a-zA-Z0-9.]がくっついた状態は
どんな意味があるのか、教えていただけるとありがたいのですが
206デフォルトの名無しさん:2006/11/01(水) 19:44:05
>>205
aa -> aaにマッチ

と同じ
207デフォルトの名無しさん:2006/11/02(木) 02:29:58
>>203

[] の中なんだから、エスケープの必要はないっしょ。
世の中には記号類と見ればやたらエスケープしたがる人がいるのはよく見るが。
208デフォルトの名無しさん:2006/11/03(金) 00:54:08
文字列から括弧内(とその括弧)を消去する方法で悩んでいます。

$string = "(foo1)bar1 (foo2 bar2(foo3))bar3((foo4) bar4)";
echo preg_replace(pattern, "", $string);

この例で「bar1 bar3」の出力を期待しますが

/\(.+\)/ なら当然何も残りません。非欲張りの /\(.+?\)/ では入れ子の
部分でおかしくなって「bar1 )bar3 bar4)」となります。
どうかお知恵をお貸しください。
209デフォルトの名無しさん:2006/11/03(金) 00:57:09
210デフォルトの名無しさん:2006/11/03(金) 09:14:04
$string = "(foo1)bar1 (foo2 bar2(foo3))bar3((foo4) bar4)";
while ($string =~ s/\([^(]*?\)//g) {}
print $string;
211208:2006/11/04(土) 12:36:54
レスありがとうございます。
ややこしそうなんで不等号に置換してstrip_tagsします。
212デフォルトの名無しさん:2006/11/05(日) 16:58:33
スレを全く読まずに質問

PerlでURLの書式として正しいか、URLとして使用できない文字が含まれていないかをチェックする正規表現教えて
日本語ドメインには対応しなくていいから
213デフォルトの名無しさん:2006/11/05(日) 17:10:01
>>212
>>1のリンク先くらい嫁
214デフォルトの名無しさん:2006/11/09(木) 09:17:27
正規表現の事が全くわからないので教えてほしいのですが
2ちゃんねるのBEの表記を正規表現で表すとどうなるのでしょうか?
215デフォルトの名無しさん:2006/11/11(土) 12:30:37
>214
>1のリンク先くらい嫁
216デフォルトの名無しさん:2006/11/11(土) 15:21:58
質問ですが、perlでまちBBSのスレをdat化させたいと思って正規表現でやろうとしたんですが出来ません。
htmltodatに入ってる『m/<dt>([0-9]+).+?(?:"mailto:(.+?)">)?<b> (.*?) </b>.*?投稿日: (.*?)<br><dd> ?(.*)<br><br>/mi』じゃダメなんですか?
217デフォルトの名無しさん:2006/11/11(土) 16:12:17
>>216
まちBBSの書式なんか知らん。
befor-afterのサンプルぐらい出せ。
218デフォルトの名無しさん:2006/11/12(日) 06:51:19
まちBBSに書き込みしたらIPと住んでる地域バレるじゃん
219デフォルトの名無しさん:2006/11/12(日) 07:05:05
東京23区板は出ないよ
220216:2006/11/12(日) 09:30:35
befor
『<dt>149 名前:<a href="mailto:sage"><b> 東京都名無区 </B></a> 投稿日: 2006/11/08(水) 10:26:08 ID:4jNjzvOE<br><dd> 白山ラーメンは営業時間がちょっとね。 <br><br>
<dt>150 名前:<font color="#008800"><b> 東京都名無区 </b></font> 投稿日: 2006/11/08(水) 19:20:35 ID:xKWAFsLU<br><dd> じゃあ素材は中国産か・・。 <br><br>』

after
『東京都名無区<>sage<>2006/11/08(水) 10:26:08 ID:4jNjzvOE<>白山ラーメンは営業時間がちょっとね。 <>
東京都名無区<><>2006/11/08(水) 19:20:35 ID:xKWAFsLU<>じゃあ素材は中国産か・・。 <>』
こういう感じにしたいんです。
221デフォルトの名無しさん:2006/11/14(火) 16:18:04
同じ文字が3個以上続いている行を表示するにはどうしたらいいですか?
222デフォルトの名無しさん:2006/11/14(火) 19:34:53
>>221
grepでピリオドとbackreferenceを使ってちょ。
223デフォルトの名無しさん:2006/11/14(火) 19:41:56
/(.)\1\1/
224デフォルトの名無しさん:2006/11/15(水) 00:09:45
regular expressionを「正規表現」って訳した奴は氏ね!
どう考えても「規則表現」あたりだろーが。
それに「せいきひょうげん」とか口に出して言うのって
なんか恥ずかしいじゃねーか。
225デフォルトの名無しさん:2006/11/15(水) 01:32:30
>>224 どう考えても

考えないで「勉強」してよ。
226デフォルトの名無しさん:2006/11/15(水) 22:52:02
共立のエイホウルマン本では「正則表現」と訳されてますがな。
227デフォルトの名無しさん:2006/11/15(水) 23:03:25
性器表現((゚)) Ψ
228デフォルトの名無しさん:2006/11/16(木) 00:00:14
MacやMACやMaC OSXやmac osXにはヒットしても
macafeeやMacAfeeにはヒットしない正規表現はどう書けばよいのでしょうか。
229デフォルトの名無しさん:2006/11/16(木) 00:07:56
/\bmac\b/i
230デフォルトの名無しさん:2006/11/16(木) 00:22:07
>>216
とりあえず面白そうなので
http://jbbs.livedoor.jp/bbs/read.cgi/computer/1929/1038588508/
で聞いてみてはどうです?
231デフォルトの名無しさん:2006/11/17(金) 16:59:43
>>224
賛同++
232デフォルトの名無しさん:2006/11/20(月) 04:23:05
正規表現で置換しまくりんぐフヒヒ
233デフォルトの名無しさん:2006/11/20(月) 07:49:26
重くなりそう
234デフォルトの名無しさん:2006/11/21(火) 13:00:04
すいません。ちょっと探しても見つからなかったのですが、
[AaAa][IiIi][UuUu]
という正規表現を分解して、マッチする文字列を出してくれるツール、
もしくはC#あたりでそういった方法などは無いでしょうか?
235デフォルトの名無しさん:2006/11/21(火) 13:17:55
>>234
*とかあったらどうすんのさ。

本当に正規表現関連の質問なのか?
組み合わせ論の話なんじゃ?
236デフォルトの名無しさん:2006/11/21(火) 13:33:47
>>235
*とかはありません。
[Aa]のパターンだけなんですが、如何せん量が多くて
自分で分解して1つ1つ書いていくのは不可能なのです。
何か良い方法は無いか探してるんですが・・・
237デフォルトの名無しさん:2006/11/21(火) 13:42:42
正規表現のままでいけない理由は?
238デフォルトの名無しさん:2006/11/21(火) 13:58:54
あったけどサイトごと消失
239デフォルトの名無しさん:2006/11/21(火) 15:10:31
4進数3桁
240234:2006/11/21(火) 17:06:08
>>237
リストを渡す相手が正規表現を知らず、全部並べて書いてくれと言われまして……
241デフォルトの名無しさん:2006/11/21(火) 17:07:25 BE:326116692-2BP(0)
ワロスw
242デフォルトの名無しさん:2006/11/21(火) 17:08:07
正規表現を教えた方が早そうだな
243デフォルトの名無しさん:2006/11/21(火) 19:22:57
ご愁傷様としか言いようがない。
244234:2006/11/21(火) 19:42:25
人生オワタ\(^o^)/
245デフォルトの名無しさん:2006/11/21(火) 20:38:55
数式の展開と同様だよね。

Maxima 5.9.1 http://maxima.sourceforge.net
Using Lisp Kyoto Common Lisp GCL 2.6.5 (aka GCL)
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
This is a development version of Maxima. The function bug_report()
provides bug reporting information.
(%i1) expand((a1+a2+a3+a4)*(i1+i2+i3+i4)*(u1+u2+u3+u4));
(%o1) A4 i4 u4 + A3 i4 u4 + A2 i4 u4 + A1 i4 u4 + A4 i3 u4 + A3 i3 u4
+ A2 i3 u4 + A1 i3 u4 + A4 i2 u4 + A3 i2 u4 + A2 i2 u4 + A1 i2 u4 + A4 I1 u4
+ A3 I1 u4 + A2 I1 u4 + A1 I1 u4 + A4 i4 u3 + A3 i4 u3 + A2 i4 u3 + A1 i4 u3
+ A4 i3 u3 + A3 i3 u3 + A2 i3 u3 + A1 i3 u3 + A4 i2 u3 + A3 i2 u3 + A2 i2 u3
+ A1 i2 u3 + A4 I1 u3 + A3 I1 u3 + A2 I1 u3 + A1 I1 u3 + A4 i4 u2 + A3 i4 u2
+ A2 i4 u2 + A1 i4 u2 + A4 i3 u2 + A3 i3 u2 + A2 i3 u2 + A1 i3 u2 + A4 i2 u2
+ A3 i2 u2 + A2 i2 u2 + A1 i2 u2 + A4 I1 u2 + A3 I1 u2 + A2 I1 u2 + A1 I1 u2
+ A4 i4 u1 + A3 i4 u1 + A2 i4 u1 + A1 i4 u1 + A4 i3 u1 + A3 i3 u1 + A2 i3 u1
+ A1 i3 u1 + A4 i2 u1 + A3 i2 u1 + A2 i2 u1 + A1 i2 u1 + A4 I1 u1 + A3 I1 u1
+ A2 I1 u1 + A1 I1 u1
(%i2)
246デフォルトの名無しさん:2006/11/21(火) 21:02:47
文字化けしたらすまん。

aa1="A a $(B#A(B $(B#a(B";aa2="I i $(B#I(B $(B#i(B";aa3="U u $(B#U(B $(B#u(B"; for bb1 in $aa1; do for bb2 in $aa2; do for bb3 in $aa3; do echo $bb1$bb2$bb3; done; done; done
247デフォルトの名無しさん:2006/11/21(火) 22:37:02
どうでもいいけど、絨毯爆撃テストに頼ってるだけじゃ条件漏れでそのうち嵌るよ。
248デフォルトの名無しさん:2006/11/21(火) 22:57:56
>>234
文字の範囲が決まってる(アルファベットだけとか)なら、
全組み合わせのテキストファイル生成して、
エディタで引っ掛けるなりgrepするなりするってのはどう?
249デフォルトの名無しさん:2006/11/21(火) 22:59:14
>>248
だからその
>全組み合わせのテキストファイル生成
してくれるツールは無いかって聞いてるんじゃん。
250デフォルトの名無しさん:2006/11/21(火) 22:59:39
って、正規表現わからないから、って言われてるのか。

ならやるべきことはリストで出すことじゃなくて、
今の正規表現を図か何かにわかりやすく起こして
説明してわかってもらうことじゃないの?
251デフォルトの名無しさん:2006/11/21(火) 23:00:51
>>249
ああ、いや、例えばアルファベット小文字10文字って決まってたら
aaaaaaaaaaからzzzzzzzzzzまで全部テキストファイルに書いて
引っ掛ける、ってな意味。限定されてないと無理だけど。
252デフォルトの名無しさん:2006/11/21(火) 23:03:13
>>251
だからその全パターンを正規表現からおこして列挙してくれるツ(ry
253デフォルトの名無しさん:2006/11/21(火) 23:08:49
vbs だけど... コマンドプロンプトから cscript xxx.vbs ってやってちょ

--- xxx.vbs
Option Explicit
Dim X
X = "[AaAa][IiIi][UuUu]"
With New RegExp
 .Global = True
 .Pattern = "\[([^\]]*)\]"
 Dim Matches
 Set Matches = .Execute(X)
 Call Foo(Matches, 0, "")
End With

Private Sub Foo(Matches, Level, String)
 If Level < Matches.Count Then
  Dim S
  S = Matches.Item(Level).SubMatches(0)
  Dim I
  For I = 1 To Len(S)
   Call Foo(Matches, Level + 1, String + Mid(S, I, 1))
  Next
 Else
  WScript.StdOut.WriteLine String
 End If
End Sub
254デフォルトの名無しさん:2006/11/21(火) 23:37:06
そんなにニーズあるのなら年末にでも開発するけど
ダウンロード一桁とかじゃないだろうな(w
255デフォルトの名無しさん:2006/11/22(水) 01:45:28
254氏キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
256デフォルトの名無しさん:2006/11/22(水) 13:32:00
頑張ってつくったところで
サイズがでかすぎるテキストファイルになって
重くて相手にされない予感
257デフォルトの名無しさん:2006/11/22(水) 15:46:11
[^a]
とか入って来たら死にそうな感じがするが
258デフォルトの名無しさん:2006/11/22(水) 17:03:54
死なない。そういうのをちゃんと扱えて
事前に計算量を予測できる、
UTF-8でも大丈夫なアルゴリズムがあるの。
259デフォルトの名無しさん:2006/11/22(水) 17:25:31
[01]を100個ぐらい並べただけで相当な数になるわけだが。
260デフォルトの名無しさん:2006/11/22(水) 17:40:36
なるけどそれを予測できればいいわけ。
1000超えたら中止とか設定するの。
261デフォルトの名無しさん:2006/11/22(水) 20:00:10
>>260
それ、何かの解決策になってる?
262デフォルトの名無しさん:2006/11/22(水) 20:38:16
>>260
目的を果たしてないぞw
263デフォルトの名無しさん:2006/11/22(水) 22:50:13
それなんて注文の多い料理店。
組み合わせだすなんて不毛なことより
どっちかというと視覚化のほうをやりたい。
264デフォルトの名無しさん:2006/11/23(木) 18:38:56
正規表現で結婚相手を見つけるにはどうしたらいいですか?
265デフォルトの名無しさん:2006/11/23(木) 20:56:43
*女
266デフォルトの名無しさん:2006/11/23(木) 21:50:36
性器表現するにはどうしたらいいですか?
267デフォルトの名無しさん:2006/11/23(木) 22:12:11
お?(ちん(ちん|ぽこ?|こ)|(まん|め)こ)


268デフォルトの名無しさん:2006/11/23(木) 22:29:56
ぼぼが表現されんようだが
269デフォルトの名無しさん:2006/11/23(木) 22:58:24
申し訳ありませんが、方言につきましては別途料金が発生いたします。
よろしいでしょうか?
270デフォルトの名無しさん:2006/11/24(金) 02:46:08
OK キャンセル いいから一発やらせろよ
271デフォルトの名無しさん:2006/11/24(金) 17:20:28
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< 問題:「同じ数の繰り返しがない数字列すべて」を示す正規表現は?

  (    )  \_____
  | | |
  (__)_)
272デフォルトの名無しさん:2006/11/24(金) 17:32:26
そうやって知りたいだけじゃねーか。
ちったぁ自分で考えろや
273デフォルトの名無しさん:2006/11/24(金) 19:46:16
同じ数の繰り返しがないって意味わかんない
274デフォルトの名無しさん:2006/11/24(金) 19:54:56
grep -v "\(.\)\1"

?
275デフォルトの名無しさん:2006/11/24(金) 21:51:15
>>271, >>273
おれは、「すべて」の意味もわかんない
276デフォルトの名無しさん:2006/11/25(土) 10:42:10
277デフォルトの名無しさん:2006/11/25(土) 16:00:53
>>273
同じ数字が隣にこない、と言えばいいだろうか
113はダメ、131はおk

>>275
全部です。数字一個の列も数字百個の列も表現できろってことです。

俺のまわりの連中は馬鹿だから誰もわかりません
勿論俺もわかりません
278デフォルトの名無しさん:2006/11/25(土) 16:26:36
(\d)(?!\1)
279デフォルトの名無しさん:2006/11/25(土) 16:28:08
ああ、列ってのは連なりってことなのかな。
だとしたらこうか。
((\d)(?!\1))+
280デフォルトの名無しさん:2006/11/25(土) 16:32:01
違うわ。こうか。

((\d)(?!\2)){2,}
281デフォルトの名無しさん:2006/11/25(土) 20:16:00
>>278
>>280

全然ダメ

>>277
987654321
1
98
988
678678

これはどれがマッチするとか例をかいたら?
282デフォルトの名無しさん:2006/11/25(土) 20:26:05
ダメって言うなら正規表現書いてみろ
283デフォルトの名無しさん:2006/11/25(土) 21:18:32
これだけ偉そうなんだから、きっとずばっと正解書いてくれるよ
284デフォルトの名無しさん:2006/11/25(土) 21:47:19
オライリーの本を読めば正解が分かる
ヒントは
?!
285デフォルトの名無しさん:2006/11/25(土) 22:35:06
VBS だが
-----
Option Explicit
Dim X, R
For Each X In Array("1", "113", "131", "987654321", "1", "98", "988", "678678")
  With New RegExp
    .Pattern = "^(?:(\d)(?!\1))*$"
    If .Test(X) Then R = "Match" Else R = "Not Match" End If
    WScript.StdOut.WriteLine X & ": " & R
  End With
Next
-----
1: Match
113: Not Match
131: Match
987654321: Match
1: Match
98: Match
988: Not Match
678678: Match
286デフォルトの名無しさん:2006/11/26(日) 05:29:10
>>281
○987654321
○1
○98
×988
○678678

この正規表現を連接・選択・スターだけで書けって言うんだ…
無茶しやがって
287デフォルトの名無しさん:2006/11/26(日) 12:05:37
ヒント
同じ数字が連続するのは10種類しかない
288デフォルトの名無しさん:2006/11/26(日) 12:52:58
123123もダメな事になりました
289デフォルトの名無しさん:2006/11/26(日) 13:43:10
>>286
オライリーの本を読めば正解が分かるな
ヒントは否定先読み

>>1
のリンク先を全て読んでもいいけどな
290デフォルトの名無しさん:2006/11/26(日) 14:50:35
ちょっと流れからはずれるんだが、疑問に思ったこと
Perl5など最近の言語処理系がサポートしているいわゆる正規表現が既に
本来の意味での正規表現ではなくなっているというのは有名な話だけど
じゃあ、そのいわゆる正規表現が表現できる言語のクラスってどんなの
なんだろう?色んなところの例を見た限りでは、少なくとも文脈自由言語の
一部を表現できるようだけど
291デフォルトの名無しさん:2006/11/26(日) 17:25:55
文脈自由文法は表現できるよ。
だから自然言語処理で、正規表現がよく使われたりする。
292デフォルトの名無しさん:2006/11/26(日) 20:03:21
>>291
つまり、「任意の」文脈自由文法をPerl5などで拡張された「いわゆる」正規表現
で表現できるってこと?もしそうだったら、どっかにそれを証明した論文がある
はずなんだけど論文へのポインタか何か知ってたら教えて
293デフォルトの名無しさん:2006/12/06(水) 00:55:21
[00:00.00]
[00:08.05]
[00:20.32]
こんなのを
[00:00]
[00:08]
[00:20]
に書き換える正規表現教えてください
294デフォルトの名無しさん:2006/12/06(水) 01:28:44
書き換える作業は各自でお願いします。
295デフォルトの名無しさん:2006/12/06(水) 03:42:17
s/\(\[.....\)...]/\1]/
s/\(\[[0-9][0-9]:[0-9][0-9]\)\.[0-9][0-9]]/\1]/
296293:2006/12/06(水) 17:36:11
>>295
ありがとうございました
297デフォルトの名無しさん:2006/12/07(木) 00:53:22
aaabbbccc と bbb を取りたい
括弧の中に括弧っていいんですか?

/(aaa(bbb)ccc)/

298デフォルトの名無しさん:2006/12/07(木) 01:26:39
かっこわるいー
299デフォルトの名無しさん:2006/12/07(木) 03:42:49
(e)
300デフォルトの名無しさん:2006/12/07(木) 03:50:18
>>291
balanced parenthesesは拡張された正規表現でどう書くの?
301デフォルトの名無しさん:2006/12/07(木) 09:11:27
>>300
perlの正規表現のマニュアルの (??{ code }) のところにそのものずばりの例がある。

$re = qr{
\(
(?:
(?> [^()]+ )# Non-parens without backtracking
|
(??{ $re })# Group with matching parens
)*
\)
}x;

ttp://perldoc.perl.org/perlre.html
302デフォルトの名無しさん:2006/12/07(木) 17:51:10
>>301
\(
(?:
(?> [^()]+ )# Non-parens without backtracking
|
(??{ $re })# Group with matching parens
)*
\)
は(??{ code })でコードが埋め込まれることで言語依存になってしまうが
拡張された正規表現ではある。しかしその外側は正規表現ではないのでは?
単なるperlの文に見えるのだが。
303デフォルトの名無しさん:2006/12/08(金) 01:36:15
>>300

こーゆーのもある(,NETね)

Regex re = new Regex(@"^
  (?>
      \( (?<LEVEL>)   # On opening paren push level
    |    
      \) (?<-LEVEL>)  # On closing paren pop level
    |
      (?! \( | \) ) . # Match any char except ( or ) 
  )+
  (?(LEVEL)(?!))      # If level exists then fail
  $", RegexOptions.IgnorePatternWhitespace);
304デフォルトの名無しさん:2006/12/08(金) 19:50:29
HTMLを取得してタグをすべて除去するperlスクリプトを書いているんですが、
javascriptだけは残ってしまいます。
正規表現でjavascriptを消去するやり方はないんでしょうか?
色々試してもさっぱりダメ……
305デフォルトの名無しさん:2006/12/08(金) 20:46:44
scriptの開始タグ〜終了タグを除去すればいい
306デフォルトの名無しさん:2006/12/09(土) 03:54:02
HTMLタグ除去って perldoc 見れば一発だし
行儀よく <!-- hoge --> に囲まれてれば
JavaScript だって一緒に消されるっしょ?

うまいことコメントアウトされてないようなら
先に script 回りだけ同じようにばっさり切ればいいし
307デフォルトの名無しさん:2006/12/09(土) 16:17:09
もうだめなんだよ
308デフォルトの名無しさん:2006/12/10(日) 11:42:44
>>305
まあ、君の言うことは正しいんだけど、その「終了タグ」を
見つけるのが大変と言うことだ。

文字列やコメント中に </script> とか書いてるのをきちんと
はじくのはちょっと骨が折れる。
309デフォルトの名無しさん:2006/12/10(日) 19:35:00
Fx1.5からはE4Xがあるから、粉砕骨折するだろうね。
310デフォルトの名無しさん:2006/12/10(日) 19:51:58
亀裂骨折はこの間したけどな
いてえよ
311デフォルトの名無しさん:2006/12/14(木) 13:00:06
>>306
それ Unicode で
http://openmya.hacker.jp/hasegawa/public/20061209/momiji.html

xss考慮するとけっこう対応は大変だぞ
312デフォルトの名無しさん:2006/12/15(金) 13:57:42
HTMLのタグ除去に似ているのですが今HTMLタグ以外の部分を(.*?)に置き換える正規表現をjavaで考えています.
判りにくいと思いますので例を言うと
<font><a href="(.*?)" target="_blank">Recycled Niceguys</a></font color="red">
<font><a href="(.*?)" target="_blank">(.*?)</a></font color="red">
こんな感じに変換にしたいのです.
今自分で考えたのは
((?:<.*?>)*)(?:.*?)((?:<.*?>)*)
group(1) + "(.*?)" + group(2)
こうなのですがうまく変換できません.
何処が間違っているのでしょうか?
ご教授お願いします.
313デフォルトの名無しさん:2006/12/15(金) 17:49:10
タグの定義が分からない
value = ">"
を考慮するかとか書いてないし
よって回答不能
314デフォルトの名無しさん:2006/12/15(金) 22:18:33
終了タグに属性書くのはかなりレベル高いボケだなw
315デフォルトの名無しさん:2006/12/15(金) 22:24:29
<input name=dir value=">">
316デフォルトの名無しさん:2006/12/16(土) 02:22:56
PHPです
URLの test.php?a=123&b=456 から a が欲しいので
/a\=(.+?)\&/
としていたのですが、test.php?a=123 だけで終わる場合があることが分かったのですが、
&または行末としたいのですが、
/a\=(.+?)[\&$]/
では行末の場合ヒットしてくれません
ご教授願えないでしょうか?
317デフォルトの名無しさん:2006/12/16(土) 02:33:12
/a\=(.+?)(\&)?/
じゃ駄目なの?
318デフォルトの名無しさん:2006/12/16(土) 13:31:22
>>316
/a=([^&]+)/
319デフォルトの名無しさん:2006/12/16(土) 13:37:32
>>316
PHPなら
$_GET["a"]
じゃあかんの?
320デフォルトの名無しさん:2006/12/18(月) 06:21:34
>>316は恥で狂い死んだらしい
321デフォルトの名無しさん:2006/12/20(水) 06:06:00
test
322デフォルトの名無しさん:2006/12/25(月) 19:36:44
どなたかご指導お願いします。
Flashで読み込む用に、
kuji=***(ランダムで変わる大吉から凶まで)
という文字列だけを出力するkuji.phpを作りました。

さらに、この***の部分だけをmain.phpに読み込んで
ランダムで変わる部分だけを表示したいのですが、
include('kuji.php');
で読み込んだあと、「kuji=」の部分を削って***だけ表示するには
どのようにすれば良いのでしょうか?PHPのバージョンは4.0.6です。
323デフォルトの名無しさん:2006/12/25(月) 20:08:17
それは正規表現使わない方が良いと思うんです。
324デフォルトの名無しさん:2006/12/25(月) 22:14:59
正規表現でand検索ってどうやるんだっけ?

「ジョージアのコーヒー」
「コーヒーはジョージア」


「コーヒー」「ジョージア」
だけを使って2文にマッチさせたい。

ジョージア.*コーヒー
だと1文目はヒットするが、2文目はヒットしない。
325 ◆TWARamEjuA :2006/12/25(月) 22:53:31 BE:2614638-BRZ(6677)
m#(コーヒー)|(ジョージア)#
ではなくって?釣り?
326 ◆TWARamEjuA :2006/12/25(月) 22:55:12 BE:4356285-BRZ(6677)
あらやだ(照)∧||∧
327デフォルトの名無しさん:2006/12/25(月) 23:26:43
んーどちらか一方ではなくて、2つの条件を満たしてマッチさせたいわけです。

たとえば
「ジョージアのコーヒー美味しいね。」
「ジョージアよりポッカの方が良い。」
という場合もあった場合に、一つ目だけをマッチさせて、二つ目を省きたいのです。

検索条件のand検索の様な事はできるのかなと思って質問しました。


328デフォルトの名無しさん:2006/12/25(月) 23:29:12
という場合もあった場合に、一つ目だけをマッチさせて、二つ目を省きたいのです。

という場合もあった場合に、一文目だけをマッチさせて、二文目を省きたいのです。
329デフォルトの名無しさん:2006/12/26(火) 00:12:35
>>327
基本的には組み合わせの数だけorでつなぐ正規表現になると思う
例えばこんな感じで

(ジョージア.*コーヒー|コーヒー.*ジョージア)
330デフォルトの名無しさん:2006/12/26(火) 01:21:40
そうですか・・・。
正規表現でスマートに実装できるかなと思ったのですが。
単語が3個4個と増えてくると結構コードが汚くなってきますよね。
とりあえず今は仕様ということで諦めるしかない様ですね。
331デフォルトの名無しさん:2006/12/26(火) 02:04:09
名前つきキャプチャとかで、「どれがマッチしたか」が分かる言語なら
325みたくorでマッチさせておいて、その後に「全部マッチしたやつ」を
探せばいいのでは
332デフォルトの名無しさん:2006/12/27(水) 02:13:25
(?=.*ジョージア)(?=.*コーヒー).*
333デフォルトの名無しさん:2006/12/27(水) 13:37:26
すみません教えて下さい
----
ABCD
こんにちは
こんばんわ
さようなら
EFGH
----
上のABCDとEFGHに挟まれる複数行の文字列を
取得するには、どのような記述にしたら
良いでしょうか?
334デフォルトの名無しさん:2006/12/27(水) 15:22:06
335デフォルトの名無しさん:2006/12/27(水) 16:56:49
>>327
>>1
のリンク先嫁
336デフォルトの名無しさん:2006/12/28(木) 12:05:35
SQLの
...where ID like 'EE%' and ID <> 'EEXX'
という条件を正規表現でやろうと思います。

エディタの正規表現検索で確認した感じだと「^(?!EEXX)EE.*$」でいけそうなんですけど、
大丈夫でしょうか?
337デフォルトの名無しさん:2006/12/28(木) 15:36:43
>>332
これでいいんだ...。orz

どうも肯定先読みの説明ってどこ見ても意味がとりにくい。

どっかにすっきりした解説がないもんだろうか。
338デフォルトの名無しさん:2006/12/28(木) 23:20:02
こんばんは。
掲示板の本文欄の書き込みでの質問です。

<a href=http://www.example.com>ホゲ</a> または
<a href="http://www.example.com">ホゲ</a> から、正規表現を使って、

ホゲ の文字をリンク状態にしてページに表示させたいのですが、
どのようにしたら良いのでしょうか?
お願いします。教えてください。
339デフォルトの名無しさん:2006/12/28(木) 23:40:12
意味不明。
><a href=http://www.example.com>ホゲ</a>
この時点で既にリンクされてるじゃん。
340デフォルトの名無しさん:2006/12/28(木) 23:49:07
>>339
”ホ”の前に”>”を入れたいんじゃないのかな?
341デフォルトの名無しさん:2006/12/29(金) 00:22:46
>>340
それもまた意味不明
342デフォルトの名無しさん:2006/12/29(金) 01:46:58
理由は不明ですが、解決しました。ありがとうございました。
343デフォルトの名無しさん:2006/12/29(金) 04:03:33
これは裏政府の暗号に違いないっ!
344デフォルトの名無しさん:2006/12/29(金) 22:16:14
秀丸の正規表現なんですが
hogehoge::と書いた時に「::」より前だけヒットさせる正規表現は.*(?=::)と
書いてうまくいっていますが、↑と別に
hogehoge:だけヒットさせるには何と書けばいいのでしょうか?
一応.*(?=:{1})で試したらhogehoge::にも引っかかってしまいますた
345デフォルトの名無しさん:2006/12/29(金) 23:58:55
>>344
hogehoge: は引っ掛けたいけど hogehoge:: ははじけばいいの?
hogehoge(?=:[^:])
でどう?

346デフォルトの名無しさん:2006/12/30(土) 00:00:51
>>337
そんなにわかりづらいか?
マッチを試みてその結果はあとに影響するけど、注目位置は変えないって
ことだけだと思うんだけど。
347デフォルトの名無しさん:2006/12/30(土) 10:26:26
>>345
ありがとう!
> hogehoge: は引っ掛けたいけど hogehoge:: ははじけばいいの?
そうなんです。ですがhogehoge(?=:[^:])だとhogehoge:にも引っかかりませんでした…
あと試したのが↓で、hogehoge::とhogehoge:両方に引っかかってしまいました
.*(?=:(?!:))
難しい・・・他にイイ案はありますでしょうか?
348345:2006/12/30(土) 13:53:19
>>347

条件見てC++のソースでも食わせると思ったのだけど違うのかな?
345の条件だと、hogehoge: の':' で行が終わるとマッチしないよ。
hogehoge(?=:(?:[^:]*$))
でどうだろう。

> .*(?=:(?!:))
これだと.*が一個目の:を飲み込んじゃうのを許しちゃうよ。
hogehogeに固定の文字列じゃなくて何らかの正規表現を置きたいなら、
hogehoge部分にコロンがこないという前提を置いていいなら、
[^:]*(?=:(?:[^:]*$))
かな。

いずれにしろ今回だめだというなら条件をもう少し詳しく提示してね。
349デフォルトの名無しさん:2006/12/30(土) 15:28:21
どうも有難うございます!
2つとも 「正規表現での'|'の前後の文字が無いかまたは + * ? の直前に文字がありません」
というエラーが出て登録できませんでした

プログラミングから縁遠い者がAutohotkeyのスクリプトを書いております
エディタは秀丸を使っているのでスクリプトを所々強調表示したいなーと思い
Hotkey::(コロン2つ)とLabel:(コロン1つ)を別々にヒットさせたいんです
350345:2006/12/30(土) 16:04:51
>>349
Autohotkeyも秀丸も使ってないので試せないのだけど(秀丸は昔は使っていた)、
Perlではちゃんとうごいってるっぽいんだけどねえ。
でもちょっと勘違いして変な記述をしていたので直してみた

[^:]+(?=:[^:]*$)

あとエラーメッセージは秀丸の?
あとでインスコして試してみるけど、打ち間違いってことはない?
期待しないところでマッチするのはあってもエラーはないと思うんだけどなあ

351デフォルトの名無しさん:2006/12/30(土) 16:10:22
>>346
「その結果はあとに影響する」と言うのがいまいちピンとこない。

でも今まで見た中では一番よくわかる解説だと思う。

[よくない例]

perlreref:

(?=...) ゼロ幅の肯定先読み表明

Microsoft VBScript の RegExp の説明:

肯定先読みを実行する部分式です。
pattern に一致する文字列が始まる位置にある検索文字列と一致します。
一致した文字列は記憶されず、後で使用することはできません。
たとえば "Windows (?=95|98|NT|2000)" は、"Windows 2000" の "Windows"
には一致しますが、"Windows 3.1" の "Windows" には一致しません。
先読み処理では、読み進まれた文字は処理済みとは見なされません。
一致の検出後、次の検索処理は先読みされた文字列の後からではなく、
一致文字列のすぐ後から開始されます。

こんな説明にみんなちゃんと理解できてるの?
352デフォルトの名無しさん:2006/12/30(土) 16:23:11
>>350
それでできました!ありがとうござます!

>あとエラーメッセージは秀丸の?
そうです。コピペでやってるんですが>>348だと登録時にエラー出ました
>>350で完璧です!今から意味を理解してみますw
353デフォルトの名無しさん:2006/12/30(土) 16:28:56
マッチするかどうかの判定には使われるけど、その部分はマッチしない。
354346:2006/12/30(土) 16:57:46
>>351
んーとね、「結果があとに影響する」というのは
(?=foo).*
マッチを試みるやり方は先読みでないときと同じでマッチに成功したか失敗したかで
その先に進むかどうかが決まる。マッチした部分は保存しないし、注目位置は変化しない
というつもりだったんだけど。

>こんな説明にみんなちゃんと理解できてるの?

説明で理解したってかどちらかというと実際に使ってみてどういう動きをするかで
覚えた感じかなあ。
最初のPerlで実装されたときから使ってるから、ほかの言語での説明はあまり気にしなかったよ。
355345:2006/12/30(土) 17:01:27
>>352
秀丸で348のパターンがエラーになるのは確認した。
なんでこんなメッセージになるのかよくわからんがw

356デフォルトの名無しさん:2006/12/30(土) 17:49:48
>>355
重ね重ねすみません!

あちこちヒットしてしまうようになったのでw
Label:(行末)
だけにヒットするにはどうしたらいいんでしょう・・
秀丸ヘルプを引きながら理解しようとしてますが
[^:]+(?=:[^:]*$)←自分がいじるとことごとく失敗します
357デフォルトの名無しさん:2006/12/30(土) 18:33:10
Label:$
358デフォルトの名無しさん:2006/12/30(土) 19:33:21
…_| ̄|○

一応試したのがこれですw
[^:]+(?=:[^:]*{0}$)
359デフォルトの名無しさん:2006/12/30(土) 22:46:29
>>344
よくばりマッチとかでぐぐれ
360345:2006/12/30(土) 23:58:33
>>356
AutoHotKeyとやらの解説ページ見たんだけどさ、要は
コロン一つだけのラベル行と、キー定義のコロン二つを見分けたいってこと?

解説ページの記述によればコロン一つの行はラベルとコロンで行が終わってなければ
いけないようなことが書いてるから、357にあるように
^[^:]*;$
にしといて、コロン二つのほうは行のいろんなところに使えるみたいだけど行頭だけに絞るなら
^[^ ]*::
くらいににしとけば?

ラベル名は多分アルファベットだけで記号は使えないような気がするのでその辺で
絞ってもいいけど。

ピンポイントで解決したいこと書くより最終的に何をしたいのかを書いたほうが
いいアドバイスをもらいやすいってのはあると思うよ。
361デフォルトの名無しさん:2006/12/31(日) 00:15:20
>>354
詳しい説明ありがとう。

大体理解できた






...と思う。m(_._)m
362デフォルトの名無しさん:2006/12/31(日) 12:43:33
>>359-360
345さん!シンプルに^[^:]*:$と^[^ ]*::で登録しました
>コロン一つだけのラベル行と、キー定義のコロン二つを見分けたいってこと?
そうなんです。説明足らずですみません
よくばりマッチも勉強します
[^:]+(?=:[^:]*$)もなんとか理解できたと思いますw

本当にありがとうございました!感謝感謝です
363デフォルトの名無しさん:2007/01/01(月) 21:13:05
PHPを使っています。
&を&におきかえたいんですけど、
今のところ、&を&に置き換えるという単純なことをしています。
ただこれだと、
&という入力があったら、&amp;という風になってしまいます。
他の実態参照(&文字列;)も、同じようになってしまうので困っています。

正規表現でどのように表現したらよいのでしょうか?
やりたいことは、&を検索したいのですが、
& " <などの実態参照は除外したいです。
364363:2007/01/01(月) 21:14:30
すみません。書き直します。

PHPを使っています。
&を&amp;におきかえたいんですけど、
今のところ、&を&amp;に置き換えるという単純なことをしています。
ただこれだと、
&amp;という入力があったら、&amp;amp;という風になってしまいます。
他の実態参照(&文字列;)も、同じようになってしまうので困っています。

正規表現でどのように表現したらよいのでしょうか?
やりたいことは、&を検索したいのですが、
&amp; &quot; &lt;などの実態参照は除外したいです。
365デフォルトの名無しさん:2007/01/01(月) 21:29:44
>>364
&amp;を&に置き換えた後&を&amp;におきかえれば?
366デフォルトの名無しさん:2007/01/01(月) 21:31:27
&amp;を&に置き換えてそのあと&を&amp;に置き換えるとか
367デフォルトの名無しさん:2007/01/01(月) 21:32:22
かぶったー
368デフォルトの名無しさん:2007/01/01(月) 21:37:32
&&
369デフォルトの名無しさん:2007/01/01(月) 21:40:31
これでどうだ?
&amp;
370363:2007/01/01(月) 21:44:30
>>365-366
ありがとうございます。
早速やってみたところ、&amp;は思い通りになりました。
しかし、他の実体参照文字(&quot;等)では、
&amp;quote;という風になってしまいますorz
371デフォルトの名無しさん:2007/01/01(月) 21:44:46
if (!変数 =&amp;) {
&を&amp;に置き換える
}
372363:2007/01/01(月) 21:48:12
と思いましたけど・・・

&amp;quot;でも表示上は一緒でしたね。
&quot;

どうも皆様ありがとうございました!
373デフォルトの名無しさん:2007/01/01(月) 23:45:15
まあ、解決したみたいだから何よりなんだけど、
そもそも & と &amp; が混在していると
言う設計がおかしいのではないの?
374デフォルトの名無しさん:2007/01/03(水) 13:35:53
PHPの置き換え処理で、文字列があったら、その文字列に置き換える
(つまり同じ文字列を出力する)
ということをしたいのですが、マッチした文字列をどう表現すればいいのかわかりません。
ereg_replace(".*", ".*", $str);
というようなことをしたいのですが、
第2パラメータをどう書けばいいのかわかりません。
上の例だと、そのまま.*という文字列が出力されてしまいます。
どなたかお助けください。
375デフォルトの名無しさん:2007/01/03(水) 14:06:18
preg_replace("/(.*)/", "\\1", $str);
動くかはしらん
376デフォルトの名無しさん:2007/01/03(水) 14:21:13
>>375
見事できました!
実は置き換え対象で\\1を指定したのに置き換えられなくて、
悩んでいたのですが、()で囲む必要があったんですね。
勉強になりました。どうもありがとうございました。
377デフォルトの名無しさん:2007/01/10(水) 11:49:44
最近 「字句解析処理系の生成ツール flex」 というのを知ったんだけど
C言語から使う場合 regex.h とどっちが早いの?
regex.h 遅いってイメージがあるんだけど・・・
378377:2007/01/10(水) 13:17:48
勘違いしてました。ごめんなさい
379デフォルトの名無しさん:2007/01/10(水) 21:12:03
↑誰だよオマエ
380デフォルトの名無しさん:2007/01/11(木) 07:42:12
ORACLE10gのREGEXP_LIKEを使っています。

訳あってOR、ANDを正規表現で行っています

SELECT * FROM TEST WHERE
REGEXP_LIKE(text,'(あいう)|(ABC)|(xyz)')
上のSQLであいうまたはABCまたはxyzというOR検索は可能ですが
AND検索の正規表現がどうしてもできません。

知恵をかしてください。


381デフォルトの名無しさん:2007/01/13(土) 16:08:13
PHPのpreg_matchでの質問です。

$template_src = preg_replace("/\\\[/","[",$template_src);
上のように、データ内に存在する\[を、ただの[へ置換したいのですが、
Compilation failed: missing terminating ] for character class at offset 3
という警告が出てしまいます。

自分では、\\で\として扱われているのかが怪しいと感じているのですが・・
これはどのようにすれば解決できるのでしょうか?

ご教授下さいませ。
382デフォルトの名無しさん:2007/01/13(土) 16:10:56
preg_replace('/\[/',"[",$template_src)
383381:2007/01/13(土) 16:23:51
>>382
$hoge = '\[hoge\]';
$hoge = preg_replace('/\[/',"[",$hoge);
echo $hoge;

\[hoge\]が出力されてしまいます。
シングルクオートで囲んでも、\[はただの[として認識されているようです。
または、私何か間違った認識をしているのでしょうか・・?
384デフォルトの名無しさん:2007/01/13(土) 16:33:41
>>383
preg_replace('/\x2F\[/', '[', $hoge);
385381:2007/01/13(土) 16:34:07
\\\\で\を表現するそうです。
笑ってください。

ありがとうございました。
386デフォルトの名無しさん:2007/01/14(日) 01:09:06
複数のパターンを含まない正規表現はどう記述すれば良いのでしょうか。
387デフォルトの名無しさん:2007/01/14(日) 05:15:51
>>386 例えば?
388386:2007/01/14(日) 14:41:08
>>387
/\[([a-zA-Z]+)\]/ と /\[\/$1\]/ に挟まれていて、尚且つ /<br \/>/ と /\[\/?[a-zA-Z]+\]/ を含まないパターン、などです。

/\[([a-zA-Z]+)\](?:(?!<br \/>)(?!\[\/?[a-zA-Z]+\]).)*\[\/$1\]/

かと思ったのですが、違うようなのです。
389デフォルトの名無しさん:2007/01/16(火) 13:07:41
無理して正規表現一本でやろうとしなくてもいいんじゃないかな
390デフォルトの名無しさん:2007/01/17(水) 15:53:02
>>388
>>1
にある
391デフォルトの名無しさん:2007/01/19(金) 13:40:05
いいところ見つけた。ちょっと確認する程度なら環境整えなくて済む。

http://lab.moyo.biz/tools/regexp/index.jsp
392デフォルトの名無しさん:2007/01/23(火) 11:17:31
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=4871&forum=7
を参考に全角文字列に一致する正規表現を作っているのですが、さらに
・文字列の中間に全角スペースが1つ入っている。
・全体の文字数が20文字以内であること。
を条件に加えたいと思っていますがどのように記述したらいいでしょうか?

(マッチする例)
山田 太郎
ジョージ ブッシュ
(マッチしない例)
ウィリアム J クリントン ←スペースが2つ
山田太郎 ←スペース無し
 山田太郎 ←先頭にスペース
あいうえおかきくけこ さしすせそなにぬねの ←20文字超
393デフォルトの名無しさん:2007/01/23(火) 11:18:30
(^u^n^k^o)*
394デフォルトの名無しさん:2007/01/23(火) 12:40:12
>>392
正規表現でググレカス
395デフォルトの名無しさん:2007/01/23(火) 13:33:09
/(^o^)/ って何にもヒットしないんだな。オワタ
396デフォルトの名無しさん:2007/01/23(火) 16:08:09
正規っていう言葉は傲慢だ!
こんなセンスの無い表現を勝手に正規あつかいするな!
397デフォルトの名無しさん:2007/01/23(火) 16:10:27
「面倒くさがりのためのセンスの無い表現」 とか、 「紙面のスペース上都合の良い表現」とかに変えろ!
398デフォルトの名無しさん:2007/01/23(火) 17:24:02
399デフォルトの名無しさん:2007/01/27(土) 00:48:54
http://capslockabcjp.kitunebi.com/faq.html

boostのバグ?

スレでの指摘により、boostの動作が怪しいという指摘がありました。
boost1.33および1.33.1で/\1/を使用した場合に落ちることを確認しました。
400デフォルトの名無しさん:2007/01/27(土) 01:18:31
このスレ的に、これはテンプレにいれとくべきだな

正規表現パズル
http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/
401デフォルトの名無しさん:2007/01/27(土) 12:50:50
秀丸で置換をしているのですが

abc=
def=
ghi=




abc=abc
def=def
ghi=ghi


とするにはどういった正規表現で置換すればいいのでしょうか?
402デフォルトの名無しさん:2007/01/27(土) 13:01:45
>>401

(.+?)= → \1=\1

でいいんじゃね?
403デフォルトの名無しさん:2007/01/27(土) 13:20:09
>>402
できました!
ありがとうございます
404デフォルトの名無しさん:2007/01/28(日) 11:19:30
正規表現ってのを勉強したいんですが、最も一般的なのはどこの正規表現なんですか?
405デフォルトの名無しさん:2007/01/28(日) 11:38:51
>>404
perlかsedが手ごろ。Windowsでも入手できるよ。
406デフォルトの名無しさん:2007/01/28(日) 11:57:42
いや、文法は検索して勉強からするからいいんですけど、
正規表現って環境によって色々種類があるみたいで、
どれを勉強すればいいかわからない・・・。
一番スタンダートとされてるものは、grepなんですか?
407デフォルトの名無しさん:2007/01/28(日) 12:11:58
Perl5互換のものが多いかと。
408デフォルトの名無しさん:2007/01/28(日) 13:15:18
いいえ。
409デフォルトの名無しさん:2007/01/28(日) 13:32:17
メジャーなのではegrepが一番セオリーに忠実だと思う。
世間じゃPerl式が主流でもう正規表現の範疇から外れまくってる。
410デフォルトの名無しさん:2007/01/28(日) 15:08:29
とりあえずperl互換モードがなければ駄目エンジン決定だからな
411デフォルトの名無しさん:2007/01/28(日) 16:14:22
そんなにPerl式っていいのか?
lexやegrepと動き違うし、エンジンごとの挙動もぴったり合わなくなるし
使ってて感覚的に不正確なんだが(それが正しくても人間の感覚とズレるから)。
412デフォルトの名無しさん:2007/01/28(日) 16:42:03
俺の感覚にも合わん。>perl式
俺的に、かなりの場面で、egrep程度の能力+プログラムコードの方がわかりやすい。
もちろんそうでない場面も多少はあるだろうが、あれだけ拡張する必要はなかったろう。
413デフォルトの名無しさん:2007/01/28(日) 20:25:42
Perl式とegrep式ってどの辺が違うの?

最短一致の?とか、(?…)系のとこだけかな?
414デフォルトの名無しさん:2007/01/28(日) 21:16:46
egrepは常にパターン全体で最長の一致をとるけど、
perlは適当なところで中断して結果を返す仕様。

perlは深さ優先探索で枝刈りって制約をうけるから、
プログラム的な設計の自由度が全然なくてDFAとか使えない。
415デフォルトの名無しさん:2007/01/29(月) 00:04:20
駄目とか使えないとか じゃあなくって
perl式は世のデファクトだからなぁ

正しいとか正しくないとか関係ない
416デフォルトの名無しさん:2007/01/29(月) 00:42:55
>>414
んと、世間でよくいう「PPerl 5互換」というのはものぐさマッチ(最短マッチ)などの
表記上の拡張を受け付けるかどうかという観点でいってるんじゃないかな。

枝刈りだのなんだのまで考えて「互換仕様」にしているdeveloperはいないんじゃかろうか?
もちろん、理屈の上でperlと同じようにしないと実装できないというのは
おいといてね。

斜め読みなんで勘違いしているかもしれないけど、perl 6の rule だと
DFAで解釈できるところはDFA作ってマッチングを行うとかあったような。
まあもはやアレは「正規表現」じゃないが。
417デフォルトの名無しさん:2007/01/29(月) 01:34:35
ちょんまげは性器表現
418デフォルトの名無しさん:2007/01/29(月) 02:06:01
妹「ああもう沢山。この兄と来たら陰茎の事ばかり。
  得意げな顔をして髷を動かしている。こんな兄の血を引く自分が憎い」
妹「卑猥にすぎる。日本はどうなってしまうのか」
419デフォルトの名無しさん:2007/01/29(月) 02:26:21
オラ難しいことはわかんねーだが
最短一致てのが使えるってーことを知ったとき
「こりゃ便利だべ!」と思ったべさ
420デフォルトの名無しさん:2007/01/29(月) 15:21:23
専門板らしくなってきたのに。
421デフォルトの名無しさん:2007/01/29(月) 19:31:06
>>418
兄の血を引く妹っておかしくね?
422デフォルトの名無しさん:2007/01/30(火) 02:33:54
血縁は兄の子だけど、登録は兄の妹になってるだけじゃね?
423デフォルトの名無しさん:2007/01/30(火) 02:39:51
424デフォルトの名無しさん:2007/01/30(火) 02:48:03
正規表現で説明して
425デフォルトの名無しさん:2007/02/02(金) 18:00:49
javascriptの正規表現なのですが、
 /\/ads?[./]/
 /\.ads?\//
を上手く組み合わせられませんか?
/[,/]ads?[./]/
だと \.ads?\. もマッチしてしまうので、
これを除外したいのですが……。
426デフォルトの名無しさん:2007/02/02(金) 21:02:57
/\/ads?[./]|\.ads?\//
427デフォルトの名無しさん:2007/02/07(水) 14:01:14
ttp://www.sixnine.net/regexp/regexp4.html
こちらで紹介している”例外弐 : 直前にマッチした部分を後で使う方法”
というのは普通のエディタでは使えませんか?
428デフォルトの名無しさん:2007/02/07(水) 15:10:36
「普通のエディタ」ってメモ帳か?
429デフォルトの名無しさん:2007/02/07(水) 15:16:35
>>428
自分が今使用しているのはサクラエディタです。
430デフォルトの名無しさん:2007/02/07(水) 15:31:23
じゃ、そちらのスレでどうぞ
431デフォルトの名無しさん:2007/02/08(木) 03:18:39
行末から一番近い位置のある文字から行末まで削除したいのですが
分かりません(行頭からというのは出来るようになりました)
kome!kame!
の最後からkを探してそこから削除して kome! だけを残したいです
よろしくお願いいたします
432kome!kame!:2007/02/08(木) 06:21:48
test
433デフォルトの名無しさん:2007/02/08(木) 07:22:24
echo 'kome!kame!' |sed -e "s/\(.*\)k[^k]*$/\1/"
434デフォルトの名無しさん:2007/02/08(木) 11:17:16
kome!
435デフォルトの名無しさん:2007/02/08(木) 18:45:14
{}の間の、改行のみの行、を正規表現で削除したいのですが、どうなるでしょうか?
例えば、
-----------------
{
hoge

}

{

}
-----------------------
の場合、
-----------------------
{
hoge
}

{
}
-----------------------
にしたいと考えています。

phpのpreg_replaceを利用するつもりです。
おながいします orz
436デフォルトの名無しさん:2007/02/09(金) 10:04:17
MovableTypeのプラグインで、BANASCIIという、
ラテン文字のみのトラックバックを禁止するものがあるのですが、
それと同じ正規表現をPHPに使いたいと思い、
ソースを見たのですが、Perlもわからずちんぷんかんぷんです。
とりあえずそれらしきもの(^[\x00-\xff]+$)を見つけたのですが、
これをそのままPHPでやってみたところ、日本語が混じってるのにも関わらず、
マッチしてしまったようです。
PHPではどうかけばいいのでしょうか?どなたかアドバイスお願いします。
437デフォルトの名無しさん:2007/02/09(金) 15:01:40
こんにちは、宜しくお願いします。

以下にあるjavaの正規表現構文に従って

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/util/regex/Pattern.html

正規表現でメールアドレスを取って行きたいです。
以下の様な一行にあるメールアドレスを"<"や">"を判定材料として使わずに
取り出す事は可能でしょうか?XYZは任意の文字列です。

To: =?ISO-2022-JP?B?GyRCSRsoQg==?= <[email protected]>, =?ISO-2022-JP?B?GyRCRsoQg==?= <[email protected]>
438デフォルトの名無しさん:2007/02/10(土) 14:58:29
>>436
\xffじゃなくて\x7fが正解
439デフォルトの名無しさん:2007/02/10(土) 22:02:19
A,B,CDE,F
#A,B,C,D
HOGE,HOGE,
aiueo,kakikukeko
#E,F,G
....
というようなデータがあったとして、
#で始まる行だけ「,」を「&」に置換するのは正規表現だけでできるでしょうか?
PHPのpreg_replaceを使った置換ライブラリが既にあって、
それを通す時に置換しないといけない状況なので困っています…。

↓こういう出力になって欲しいのです。
A,B,CDE,F
#A&B&C&D
HOGE,HOGE,
aiueo,kakikukeko
#E&F&G
....
440乞食:2007/02/10(土) 23:09:20
めぐんで下さい。

ClipsedをTeraPadに追加したのですが、ClipsedのGUIの日本語が
文字化けして読めません。Clipsedのメイン画面と複数検索補助画面の
画像ファイルをどこかにアップして頂けないでしょうか?

よろしくお願いします。(ペコ

441デフォルトの名無しさん:2007/02/11(日) 00:01:31
>>440
どこを正規表現?
442デフォルトの名無しさん:2007/02/11(日) 04:59:55
>>439

行頭が#のときだけ置換してから呼ぶというパターンでなんか不具合があるの?


if (preg_match(行頭の#)) {
   plage_replace ほげほげ ← ,を&に置き換え
}
ライブラリ呼び出し

つーぱたーんでさ。
443デフォルトの名無しさん:2007/02/11(日) 06:24:53
>>442
ありがとうございます。PHPのコードが入れられたら一発なんですよね。
でも、設定ファイルに相当するものしか変更する権限がないので、
プログラム部分が一切変更できません。なので、正規表現のみで実現できないか悩んでいます。

しかも変更できる部分が

preg_replace('/スラッシュの内側と/', '置換後', ...);

だけなので、パターンに/eとか/mを指定してすることもできず、例えば

preg_replace('/^L.*$/me', "str_replace(' ', '', '$1')" ...);

となるようにすることもできません。

ウワーン(T_T)
444デフォルトの名無しさん:2007/02/11(日) 20:11:19
>>439
phpにバージョンによっては可能
445デフォルトの名無しさん:2007/02/11(日) 20:24:58
preg_replace('/^\#.*$/me', "str_replace(',', '&', '\\0')", $data);
うちはこれで動作したみたいだけど
446デフォルトの名無しさん:2007/02/11(日) 20:44:01
ありがとうございます。
>>443の通り、プログラムが書けるわけではないので
正規表現のみでできないか探しています。
447442:2007/02/11(日) 23:59:26
>>443
そーゆー制限事項は省略せんでくれ
正規表現にこだわって問題を難しくしている人がままいるので気になるのだよw
でだ、

<?php
$str0 = "#a,b,c,d";
$str1 = "e,f,g,h";
$pat = "/(?=(?:#|(?<=.)\G))([^,]*),/";
echo preg_replace($pat, "$1&", $str0), "\n";
echo preg_replace($pat, "$1&", $str1), "\n";

結果
#a&b&c&d
e,f,g,h

こんな感じになったがこれでよいかや?
448デフォルトの名無しさん:2007/02/12(月) 02:09:51
行単位じゃないならこれで動くかな?
ほとんど>>447のパクりだけど

$str = 'A,B,CDE,F
#A,B,C,D
HOGE,HOGE,
aiueo,kakikukeko
#E,F,G';
echo preg_replace("/(?=(?:#|(?<=.)\G))([^,\r\n]*),/", "$1&", $str);
449デフォルトの名無しさん:2007/02/12(月) 17:49:40
>>447失礼しました。
既存のライブラリを使わないといけない制限はかなりツライですね…。

>>448の方法で動きました!
内部的に行単位じゃありませんでした。
感謝の気持でいっぱいです。
ありがとうございます。
うをースゲー!
450デフォルトの名無しさん:2007/02/12(月) 19:51:34
PHPの正規表現で携帯から送信されたメールのヘッダから宛先アドレス部分を取り出す場合の質問です。
preg_match("/To: <(.+?)>\s/", $header, $result);
・・・と書いています。これでvodafoneのV602SHから送信されたメールでは上手くいきました。

これはこれでメールの仕様通りだと思いますが、
もしも「To」が「to」や「TO」だったら? もしも「To:」の後ろのスペースが1つじゃなかったら??
もしも「< >」が使われていなかったら??? etc.

そう考えていくと正規表現を何パターンも用意しなくてはならず、漏れが怖いです。
こういうとき、皆さんはどう対処していますか? この場合の汎用的な正規表現ってあるのでしょうか?

なお、検索したらモード修飾子というものがあるのを知り、
preg_match("/To:\s?<?(.+?)>?\s/i", $header, $result);
にしてみたら、かえって悪くなりましたorz

今までマッチしてたはずのものにもマッチしなくなりました・・・
451デフォルトの名無しさん:2007/02/12(月) 20:35:09
基礎くらいちゃんと勉強してきな
452デフォルトの名無しさん:2007/02/12(月) 22:56:02
…と、回答できるほどの基礎能力が身に付いていない>>451の独り言であったww
453デフォルトの名無しさん:2007/02/12(月) 23:22:01
*
[]
454436:2007/02/13(火) 04:37:32
>>438
返答おそくなってすみません。
\x7fにしたところみごとできました。
本当にどうもありがとうございます。
455450:2007/02/13(火) 11:22:48
おはようございます。
昨夜いろいろ試してみましたが、結局ダメでした・・・

どなたかお知恵をお貸しください・・・
456デフォルトの名無しさん:2007/02/13(火) 11:33:32
>>455
答えようかと思ったらすでに回答ついてるじゃないか
457デフォルトの名無しさん:2007/02/13(火) 11:56:20
>>456
分からないなら分からないと素直に認めないと。
458デフォルトの名無しさん:2007/02/13(火) 12:20:45
簡単すぎて答える人がいないだけだと気づけ
459デフォルトの名無しさん:2007/02/13(火) 14:34:42
>>458
「自分は玄人ぶってるけど、実は自信が無いただのバカです」と気づけ。
460デフォルトの名無しさん:2007/02/13(火) 20:01:26
この板過去にさかのぼってIDが突然表示されたら面白そう。
461デフォルトの名無しさん:2007/02/13(火) 20:52:22
>>450
「メールヘッダからメールアドレスを抜き出したい」
という要件を「厳密に」やろうとすると、実は極めて難しいです。
462デフォルトの名無しさん:2007/02/13(火) 21:12:54 BE:479758267-2BP(737)
<p>aaaaa</p>
…いくつかの改行
…いくつかの文字列
<div>bbbbb</div>

この様に複数行にわたる文字列<p>〜</div>の一致を返すことのできる正規表現はありますでしょうか、
またそれは可能でしょうか、どうぞよろしくお願いします。
463デフォルトの名無しさん:2007/02/13(火) 21:14:42
あります、そして可能です。
こちらこそよろしくお願いします。
464デフォルトの名無しさん:2007/02/13(火) 21:37:31 BE:239879737-2BP(737)
ありがとうございます。>>463
では、その方法を伝授してはいただけないでしょうか。
465デフォルトの名無しさん:2007/02/14(水) 00:50:03
>>461
「メールアドレス」を厳密にやるのは難しいけど、
とりあえずメアドのマッチは適当でいいとして、
ヘッダの中から「To:」で始まるメアド「らしき」文字列を抜き出すのは
簡単なのでは??
466デフォルトの名無しさん:2007/02/14(水) 00:52:45
>>465
簡単だと思うなら正規表現挙げてやれよ
467デフォルトの名無しさん:2007/02/14(水) 01:17:03
必死w
468デフォルトの名無しさん:2007/02/14(水) 02:13:39
>>466
教えない
469デフォルトの名無しさん:2007/02/14(水) 09:41:44
厳密にはこれか。
http://www.din.or.jp/~ohzaki/perl.htm#Mail
長すぎてわけわからん
470デフォルトの名無しさん:2007/02/14(水) 16:53:03
>>469
いま話題になってるのは、「メアドそのもの」のマッチじゃなくて、
メールのヘッダから「To:の行」を取り出す話。
471デフォルトの名無しさん:2007/02/16(金) 00:57:45
javascriptで
1999-12-23日のような形式をした日付けかをチェックするために
function checkDate(str){
if(! str.match(/^(\d{4})\-(\d{2})\-(\d{2})$/)) return false;
var sYear = parseInt(RegExp.$1);
var sMonth = parseInt(RegExp.$2);
var sDay = parseInt(RegExp.$3);
if(sYear<1950) return false;
if(sYear>2050) return false;
if(sMonth<1) return false;
if(sMonth>12) return false;
if(sDay<1) return false;
if(sDay>31) return false;
return true;}
function checkSubmit(obj){
var empty_flag_title = obj.title.value == "";
var empty_flag_from = obj.date_from.value == "";
var empty_flag_to = obj.date_to.value == "";
if(empty_flag_title && empty_flag_from && empty_flag_to){return false;}
if(!empty_flag_from){
var str = obj.date_from.value;
if(!checkDate(str)){return false;}}
if(!empty_flag_to){
var str = obj.date_to.value;
if(!checkDate(str)){return false;}}
return true;}
とこんな感じでチェックしているのですが
2007-01-01は通るのに2007-01-08もしくは09は通りません.
自分にはまったく通らない原因がわかりませんでしたので,どなたか何処が間違っているか教えてください.
よろしくお願いします.
472デフォルトの名無しさん:2007/02/16(金) 01:14:51
parseInt("08") == 0
parseInt("08", 8) == 0
parseInt("08", 10) == 8
473471:2007/02/16(金) 12:49:48
>>472
返信ありがとうございます.
無事解決できました.
474デフォルトの名無しさん:2007/02/16(金) 22:33:22
アクセスログの解析で、****.gifは削除してカウントしたいのですが、
正規表現でどのように現すか分かりません。。

.*(?!gif)

でわ、****.gifもマッチしてしまいました。。 どのようにすればよいかお教えくださいです!
475デフォルトの名無しさん:2007/02/16(金) 23:13:24
>>474
****.gifにマッチしたら除外する方がよくないか?
476デフォルトの名無しさん:2007/02/17(土) 11:30:51
477デフォルトの名無しさん:2007/02/22(木) 11:29:01
とりあえず正規表現ドシロウトなので天麩羅のページ行って
こんなの作ったけどうまくうごかねぇ・・・

動作目標は 

先頭から+-が1つまたは無し
0から9の文字が1以上10以下連続し
その後でピリオドがあってもなくてもよい
ピリオドがない場合そっから後ろの文字が何にもなければOK
ピリオドがあった場合0から9の文字が1つ以上3以下連続してある事

^[-+]?[0-9]\{1,10\}[.][0-9]\{1,3\}

これで動くかなと思ったけど今一歩・・
実際どこが悪いかといわれるとピリオド判定が悪い気がするんだが・・・
もし気づいた人いたら指摘くださいませんか?
478デフォルトの名無しさん:2007/02/22(木) 11:55:58
それだとdotが必須になってるね。
dotを含めた小数点以下があるかないかだから、
(\.[0-9]\*{1,3\})?
かな。
479デフォルトの名無しさん:2007/02/22(木) 12:07:51
>>478
トンクス!
あ〜グループにしてそれがあるか無いかの判断と考えればいいのか

やってみます!ありがとでした
480デフォルトの名無しさん:2007/02/23(金) 15:26:35
正規表現おもすれー( ^ω^)
481デフォルトの名無しさん:2007/02/26(月) 00:45:14
htmlファイルの編集をPHPでやりたいと思っています
テーブルタグが2重(3重)になっているものがありまして

<table>
 <table>なにかKeyになる文字</table>
</table>

の時に内側のテーブルのみを消去したく
$html = preg_replace('/<table>.*?Key.*?<\/table>/is', '', $html);
としてみたのですが、外側の開始タグ以降から消去してしまいます

正規表現自体知ったばかりなので初歩的な質問かも知れませんが
ご教授いただけるとうれしいです
482デフォルトの名無しさん:2007/02/26(月) 01:46:25
×ご教授
○ご教示
483デフォルトの名無しさん:2007/02/26(月) 01:52:47
>>481
そりゃ正規表現で処理すべき問題じゃない。
知ったばかりだというならなおのことその辺に注意すべき。

ネストを二重に限定していいなら手でネストを書いとけば?

あとPHPのpreg_だと再帰的な構造も書けた気がするけど
書き下すの面倒なので俺はパス。

484デフォルトの名無しさん:2007/02/27(火) 03:48:27
>>481
Perlしか知らないけど
/<table(?!<table)(.(?!<table))*?<\/table>/
これで行けない?
485デフォルトの名無しさん:2007/02/27(火) 03:49:17
ごめん
/<table(.(?!<table))*?<\/table>/
486デフォルトの名無しさん:2007/02/27(火) 03:51:45
/is ね
487デフォルトの名無しさん:2007/02/27(火) 06:10:09
質問です。
例えばカンマで分解したいのですが、括弧やクォーテーションで括られたカンマは
対象外にしたいのです。

例1)aaa,bbb,ccc
aaa
bbb
ccc

例2)aaa(a1, a2),bbb(aaa(a1, a2)),ccc("9,999")
aaa(a1, a2)
bbb(aaa(a1, a2))
ccc("9,999")

お助けください。
488デフォルトの名無しさん:2007/02/27(火) 11:10:02
>>484
Key の処理が抜けてるような。
489デフォルトの名無しさん:2007/02/27(火) 19:16:29
PHPで以下のようにしてvalueの中身を取得したいと思っているのですが、マッチしません。

$line=preg_match('/<input type="hidden" name="MT" value="(.*?)">/i',$line,$reg);

やはり、間違ってますかね?
490デフォルトの名無しさん:2007/02/27(火) 19:18:29
$reg[1]に入ってるはず
491デフォルトの名無しさん:2007/02/27(火) 19:23:26
>>490

レスありがとうございます。入ってないんですよね。

具体的には
<input type="hidden" name="MAP" value="E139.44.55.110N35.39.19.420">
<input type="hidden" name="MT" value="東京都港区芝公園4-2-8">

という感じが、$lineに入っていくのですが。
492デフォルトの名無しさん:2007/02/27(火) 19:30:33
preg_matchの戻り値を$lineに代入してるのは何?
493489:2007/02/27(火) 19:34:30
単純にマッチしたかどうかをチェックするためです。紛らわし書き方すみません。

print_r($reg);

とやっても何も入っていないのです orz
494デフォルトの名無しさん:2007/02/27(火) 21:02:48
すいません、教えてください、、VBAで、テキスト中から、

$$自由な文字 {{自由な文字}}
例)$$foo {{boo boo boo}}

を抜き出して、自前でセレクタと要素を表現、みたいなことをやろうと色々やってみています。
現在は下のような感じなのですが、

myRegExp.Pattern = "\$\$([^{{]*)\{\{([^}}]*)\}\}"

例2)$$foo {{ boo boo } boo }}
{{で開け、}}で閉じているつもりなのに、例2のように}を単発入れると
無視してしまいます。
どこが悪いのでしょう、、どなたか教えてください・・
495デフォルトの名無しさん:2007/02/27(火) 22:15:40
[^{{]

[^{]
と同じだぞ?
496494:2007/02/27(火) 22:23:31
>495
ありがとうございます。今試して知りました・・。
長々と相談をしてしまいましたが、質問を絞れました。ご指摘いただいたように
「{{」以外の任意の文字、を表現したい、というのが相談の肝です。
([^{{2}]←これでいくように思えたのですが、駄目ですね・・。)
ご教授いただければ幸いです。。
497デフォルトの名無しさん:2007/02/27(火) 22:32:22
498494:2007/02/27(火) 22:44:35
>497
失礼しました。
499デフォルトの名無しさん:2007/02/28(水) 07:17:29
一文字で表すと責任だそうですが/./にマッチしません。
自民党に訊いた方がいいですか?
500デフォルトの名無しさん:2007/02/28(水) 14:36:35
<a href="/rap.php?q=hogehoge&p=2">hogehoge</a>

このリンクタグからhogehogeを抜き出すには、どのように書けばいいのでしょうか?
PHPなのですが、以下のように書いて取得できません。

preg_match("/(\bhref\s*=\s*[\"']?)(\/rap.php[^\s\"'>]*)">(.*)<\/a>/i",$line,$reg);
最後のキャプチャ部分が取得できないのですが。。。
501デフォルトの名無しさん:2007/02/28(水) 16:33:32
>>500
([^<]+)
502デフォルトの名無しさん:2007/02/28(水) 21:13:40
その正規表現はどこかからか持ってきたものを改造したものなのか?
それではマッチしないだろ…常識的に考えて…。
[^\s\"'>]* ←これは感心した。

/\bhref\s*=\s*([\"']?)\/rap.php?([^\s\"'\/>]*.*?)\1\s*>(.*?)<\/a>/
こんな感じでどうだ?
503デフォルトの名無しさん:2007/02/28(水) 21:14:58
ミスった。
rap.php? → rap\.php
504デフォルトの名無しさん:2007/03/02(金) 00:13:42
質問です。

http://www.din.or.jp/~ohzaki/regex.htm
> ある文字列を含まないものにマッチする正規表現
> (?:(?!foo).)*
とあるのですが、これは正しいのでしょうか?

http://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html を見ると、
(?:(?<!foo).)*
のような気がするのですが、いかがでしょうか?

どうぞよろしくお願いいたします。
505デフォルトの名無しさん:2007/03/02(金) 00:27:59
>>504
正しい

(?!foo)は現在の注目地点から見て、その後にfooが続いていない、という条件
(?!foo).で、それ自身がfooという文字列の1文字目にならない1文字にマッチ。
(?:(?!foo).)*でその繰り返し。

(?:(?<!foo).)*
だとある1文字の前にfooという文字列が来ない、という繰り返し。
最後にfooがあったらマッチしてしまう。
(?:.(?<!foo))*
これなら得られる結果は違うが条件を満たす。
506デフォルトの名無しさん:2007/03/02(金) 09:52:18
C#で正規表現を使用しています。
C++ファイル(.cpp)のメソッドの実装部分だけをくり抜こうとしています。

void Test::Test(void)
{
// メソッド実装
}

上記の { から } までを抽出しようとしているのですが
"^\{.*?^\}"ではマッチしません。

どうすれば { から } を抽出できるでしょうか?
507デフォルトの名無しさん:2007/03/02(金) 10:39:16
こりゃまたあんたえらい無茶言いよんな。
508デフォルトの名無しさん:2007/03/02(金) 10:49:36
自己解決しました。

"^\{[\n\s\w\\\*\+\.\?\{\}\(\)\[\]\^\$\-\|\&\""=:;\/,!#\<\>\+%']*?^\}"
でヒットしました。

もっと短くなればいいのですが。

あと、半角カタカナのコメントがあるとだめですが。
509デフォルトの名無しさん:2007/03/02(金) 13:25:53
必ず行頭に { とか } があるって条件なら

Regex r=new Regex(@"(?<=\n)\{(.*?)(?<=\n)\}",RegexOptions.Singleline);

でいいんじゃないですか?
510デフォルトの名無しさん:2007/03/03(土) 00:59:09
perl質問板で質問したらこっちの方が適切だと教えられたので誘導されてきました。

「$textにいくつかの文字列候補、例えばApp,Bbq,Ntk,Sunが2個以上(非重複)含まれる時」
っていう条件はどう書けばいいのでしょうか?
1つだと $text =~ /(App|Bbq|Ntk|Sun)/だけど・・・
511デフォルトの名無しさん:2007/03/03(土) 01:33:42
Perl なら
/(App|Bbq|Ntk|Sun).*\1/
でいけた気がする。
512デフォルトの名無しさん:2007/03/03(土) 01:42:34
それって重複じゃね。
513デフォルトの名無しさん:2007/03/03(土) 03:27:26
>>508
とりあえず、その過剰で余計なエスケープをやめれば短くなるでそw
514デフォルトの名無しさん:2007/03/03(土) 04:23:30
>>511
なんか条件の文があいまいだな。
そのあげられた単語の中から二種類以上見つかったら当たりってこと?

Perlスレの811にあるようにリストコンテキストで受けて、その中身を
チェックした方がいいと思うよ。正規表現だけでやってやれなくはないと思うけど
多分効率が悪い。対象の単語の数が増えるならなおさら。
515デフォルトの名無しさん:2007/03/03(土) 06:15:55
>>514
> そのあげられた単語の中から二種類以上見つかったら当たりってこと?
そうです。例えばマッチする$textの例としてはMonSunFayAppなどです。マッチングしない例としてはAppMonAppKeyなど。

>リストコンテキストで受けて
う・・とりあえずレス811を見たんですが
(scalar @{[$text =~ /App|Bbq|Ntk|Sun/g]} >= 2)
これでいけるんでしょうか??
516デフォルトの名無しさん:2007/03/03(土) 06:53:13
もう試していると思うけど、それでは無理。
正規表現にこだわらないなら(スレ違いだけど):
(grep { $text =~/$_/ } qw(AA BB CC)) >= 2
517デフォルトの名無しさん:2007/03/03(土) 08:09:02
perlスレに引っ込んでろよ。
518デフォルトの名無しさん:2007/03/03(土) 16:39:58
>>482
ご教授でも間違いではないよ
519デフォルトの名無しさん:2007/03/03(土) 17:08:08
いいえ。
520デフォルトの名無しさん:2007/03/03(土) 17:08:11
間違い
521デフォルトの名無しさん:2007/03/03(土) 17:32:05
ではありません
522デフォルトの名無しさん:2007/03/03(土) 17:39:53
判断下す前に辞書くらい引いたらどうなんだ。
523デフォルトの名無しさん:2007/03/03(土) 21:04:50
>>510
お前さん移動するなら元のスレに一言くらい書いといてくれよ。
524デフォルトの名無しさん:2007/03/04(日) 16:15:45
"abc<def>ghi<jkl>mno"

こういう文字列があった場合、
"<"から">"までを検索したいんですが、
一回目は<def>
二回目は<jkl>
に、ヒットさせたいと思ってます。

"<.*>"で、検索すると、
"<def>ghi<jkl>"という具合にマッチしてしまうんですが、
何かいい方法はないでしょうか?
525デフォルトの名無しさん:2007/03/04(日) 16:33:56
"<[^>]*>"とか。
526524:2007/03/04(日) 17:09:31
>>525
いけましたっ!
ありがとうございます。
527デフォルトの名無しさん:2007/03/06(火) 04:17:08
IgnoreCase の場合で、一致したパターンそのものを得たいのですがどうすればよいのでしょうか。

例えば、hogeboo を (HoGe|Fuga) ってパターンで一致させる場合、$1 は hoge になります。
得たいのは HoGe です。
528504:2007/03/06(火) 06:17:12
>>505

せっかくすぐにレスをいただいたのにお礼が遅くなりまして、すみません。
なるほど。「現在の注目地点」という考え方をするのですね。
なんとなく、前とか後とかとしかとらえられていなかったので、勉強になりました。
よくわかりました。どうもありがとうございました。
529デフォルトの名無しさん:2007/03/06(火) 13:49:17
>>527
一度HoGeに置き換えてもう一度マッチさせるとか
530デフォルトの名無しさん:2007/03/06(火) 13:54:24
>>527
ワイルドカードや量指定子などがついていないなら
正規表現の文字列表現をマッチさせて取り出した部分文字列で逆に検索すればいいんじゃね?

(?i:HoGe|Fuga) -> hogeboo -> hoge
?i:hoge -> (HoGe|Fuga) -> HoGe
531デフォルトの名無しさん:2007/03/06(火) 15:23:05
この機能が正規表現の処理系に組み込みであればデバッグとかに凄く便利そうだけど、
一般には理論的に不可能なのかな?
532デフォルトの名無しさん:2007/03/06(火) 17:35:55
可能だけどニーズが無いだけ
533デフォルトの名無しさん:2007/03/07(水) 00:27:11
実質的に|でどっちに分岐したのかを判定するのにしか使えなくね?
534デフォルトの名無しさん:2007/03/07(水) 03:02:31
まさしく switch 文などでの分岐で利用したいのです。
コードの可読性を考えて、IgnoreCase の case でひっかけたい。
現在は小文字化や大文字化した後の文字列でひっかけてます。
その場合、case 条件の値が小文字化や大文字化済の文字列になって、
いまいち見た目美しくない。
たいした問題ではないのですが、気分的にいやなので。
case の一致条件が IgnoreCaes にできる処理系だといいんですが。

>>530
Hoge や Fuga など取り出す部分を対象文字列分用意して置き換えてしまえば
可能なのはわかりますが。
$1 風にエレガントにできないのかな〜と?
535デフォルトの名無しさん:2007/03/07(水) 14:02:46
できるかできないか、できたとしてどのように実現するかは処理系に依存するわけだが、
その処理系を明らかにしてくれないことには答えようがないと思うんだ。

ここまでのお前さんのレスだけだと、処理系を作ろうとしているのか、
既存の処理系を使っているのかすらわからない。
536デフォルトの名無しさん:2007/03/07(水) 14:22:20
もうさあ、処理系に何を使ってるか示さない香具師に回答するのやめようや。
537デフォルトの名無しさん:2007/03/11(日) 20:42:15
質問です。
www.hoge.jp/huga/index.html
のような文字列を www.hoge.jp と /huga/index.html とに分割したいんですが
(要は1個めの"/"の前と"/"以後で分けたい)、この場合それぞれにマッチする
正規表現はどうなるでしょうか?
538デフォルトの名無しさん:2007/03/11(日) 20:55:41
前者:
[^/]*
後者:
.*
539 ◆TWARamEjuA :2007/03/11(日) 21:03:30 BE:1307243-2BP(6811)
($domain, $filename) = $url =~ m|(.+?)/(.+)|;
perl的。
540デフォルトの名無しさん:2007/03/11(日) 21:21:00
($domain, $filename) = split '/', $url, 1
541デフォルトの名無しさん:2007/03/14(水) 01:11:05
いちばん萌える正規表現って何ですか?
542デフォルトの名無しさん:2007/03/14(水) 11:05:09
>>541

/ですぅ/i
543デフォルトの名無しさん:2007/03/15(木) 13:32:22
どうせ
[ぁ-ん]とか期待してるんだろ!!そうだろ!!
544デフォルトの名無しさん:2007/03/15(木) 14:38:29
>>541
メールのヘッダのアドレスを解析するやつ
545デフォルトの名無しさん:2007/03/16(金) 08:17:30
>>541
^..^
546デフォルトの名無しさん:2007/03/16(金) 22:51:06
リンクされていないURLにのみリンクするってことを、Pythonでもできませんか?
次のような感じでPerlでは想定した結果が出るんですが、
Pythonだと (?>pattern) が使えない関係でどうにもうまくいきません。( ++, *+, ?+ とかも使えません )

# yahooにのみリンクするサンプル
$html = q{
<p><a href="http://www.google.co.jp/">http://www.google.co.jp/</a></p>
<p>http://www.yahoo.co.jp/</p>
};

$html =~ s`(?<!\ssrc=")(?<!\shref=")(?>(?<![a-z09/])(h?ttp://[-_a-z0-9.~:/?#%@!$&'()*+,;=]+))(?!</a>)`$1 <a href="$1">[open]</a>`gi;
547546:2007/03/17(土) 01:59:09
とりあえず re.sub(pattern, repl, string) の repl に関数を指定する方法で解決しました。
一行でできればなおベストですが・・・
お邪魔しました。
548デフォルトの名無しさん:2007/03/18(日) 03:28:43
Javascriptの正規表現って、perl互換だっけ?
549デフォルトの名無しさん:2007/03/18(日) 11:31:48
>>548
互換てどこまでの意味でいってる?
たいがいの表記なら使える程度なら互換性はある。
Perlしかないものがあるのと、
バグまで含めた動作でいえば互換性は
ないかもしれない。
550デフォルトの名無しさん:2007/03/19(月) 10:36:19
>>548 のレベルで使いこなせる範囲では互換性はある。
551デフォルトの名無しさん:2007/03/19(月) 11:56:15
事実だけど、そういう意地悪なこと言う奴は死ねばいいのに。
552デフォルトの名無しさん:2007/03/19(月) 15:57:53
まあそのうち死ぬから
553デフォルトの名無しさん:2007/03/19(月) 16:42:33
その程度でいちいち腹を立ててたら早死にするよ
554デフォルトの名無しさん:2007/03/21(水) 09:32:13
正規表現を状態遷移図に変換するツールalamo。
現在WIN32バイナリのみリリース、
まだシフトJISのみ入力可能。

使用方法:
標準入力から正規表現を入れると標準出力にdot言語のソースが出力される。
A>alamo < textfile | dot -Tjpg > out.jpg
トンプソンの構成法でなくεを消去した状態のNFA。
出力をファイルに落としてからUTF8に変換すれば漢字も出た。

http://capslockabcjp.kitunebi.com/alamo-a.zip

※動作条件としてhttp://www.graphviz.org/が必要
555デフォルトの名無しさん:2007/03/27(火) 11:20:01
htmlから<input>のname要素のみを取得したいのですがどのような正規表現になりますか?
<input type="text" name="test1" value="aaaa" size="20">
→<input type="text" name="" value="aaaa" size="20">
<input>を見つける事ならできるのですがname="test1"部分のみを取得する方法がわかりません。
お力を貸してください。
556555:2007/03/27(火) 12:50:24
自己レスになりますが
<[^\/A-Za-z]*input[^>]*(text|checkbox|radio|hidden)[^>]*(name[ ]*=[ ]*[\"\'][0-9A-Za-z][^\"\']*[\"\'])[^>]*>
でサブパターンにマッチした文字列を置き換えるようにしました。
間違えてたらご指摘いただければと思います。
557デフォルトの名無しさん:2007/03/27(火) 19:32:45
 7:25PM  up 167 days,  2:03, 2 users, load averages: 1.74, 1.67, 1.30
シェルのuptimeコマンドの結果から:
 7:25PM  up (167) days,  2:03, 2 users, load averages: (1.74), (1.67), (1.30)

丸括弧( )で括った部分をマッチさせるために、次のように表現してみました。
/  up (.+) days?, .+ load average: (.+), (.+), (.+)/

もっとスマートな表現方法があればアドバイスをお願いします。
558デフォルトの名無しさん:2007/03/27(火) 19:46:03
/proc/uptime と /proc/loadavg 見る方が良さそうだけど・・・ってLinuxじゃないとだめか。

とりあえず非欲張りな量指定子が使えるならそれ使った方がいいし、
. にしないで [0-9.] とかにしたほうがよさそう。
559デフォルトの名無しさん:2007/03/27(火) 19:51:22
[0-9.]みたいにしたら欲張りな方が速いか。
後、uptimeって1day未満の場合の書式はどうなってんのか知らんがだいじょうぶなの?
560デフォルトの名無しさん:2007/03/27(火) 20:01:19
uptimeの見本。
RedHat:
19:54:00 up 2:59, 4 users, load average: 1.00, 1.02, 1.02
FedoraCore:
19:55:03 up 50 days, 13:17, 3 users, load average: 0.00, 0.00, 0.00
Solaris:
7:58pm up 1 day(s), 1:01, 2 users, load average: 0.03, 0.01, 0.02
午後 8時01分 稼働 1 日間, 1:04, 3 ユーザー, 平均負荷率: 0.00, 0.00, 0.01
561557:2007/03/28(水) 00:16:02
いろいろ悩んだ結果、Load Average の部分をマッチさせることにしました:
/load average: ([0-9.]+), ([0-9.]+), ([0-9.]+)/

みなさん、ありがとうございました。
562デフォルトの名無しさん:2007/03/28(水) 09:39:51
教えて君です。急にperlのメンテをする羽目になったのですが、perlも正規表現が読めなくて困っています。
sjisにて、
$tmp =~ s/?:\x0D\x0A|[\x0D\x0A])?$/,/;
というのは、
$tmpの(「CRの次にLFが続くもの」もしくは「CRまたはLF」)が0もしくは1個続いた後で行末に続くという箇所をカンマで置き換えるという解釈でよろしいでしょうか?
563デフォルトの名無しさん:2007/03/28(水) 12:42:42
>>562
左括弧が抜けているが、多分その通りだね。
元のソース作った香具師は、かなりの糞だな。
普通は次のように書く。

$tmp .= "," if chomp $tmp;
564デフォルトの名無しさん:2007/03/28(水) 13:03:23
>>563
ありがとうございました。
某所でこのコードの続きについて質問したのですが、有名処のソースのコピペだったようです。
解釈についてもそこに書かれてたので、一応リンクを貼っておきますね。
http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values

しかし、perl読みづらい…。
565デフォルトの名無しさん:2007/03/28(水) 13:34:10
「かなりの糞」などと言われなくてはいけないほどのコードでもないと思うのだが。
566デフォルトの名無しさん:2007/03/28(水) 13:37:55
それに意味変わってるしな
567デフォルトの名無しさん:2007/04/10(火) 19:35:25
ちょっとお聞きしたいことがあります。
複数の文字列に一致させたい場合、たとえば「ヨーグルト」「プルーン」を含むテキストに一致させたい場合は、
次のようにすればいいのでしょうか。

.*ヨーグルト.*プルーン
で検索。次に
.*プルーン.*ヨーグルト

自分で言うのも情けないですが、ずぶの素人なので相当あほなやり方でやってる気がします。
568デフォルトの名無しさん:2007/04/10(火) 19:58:14
|
569デフォルトの名無しさん:2007/04/10(火) 20:42:37
>>568
orではなく、両方を含む文字列に一致させたいのですが。
570デフォルトの名無しさん:2007/04/10(火) 21:23:13
ヨーグルト.*プルーン|プルーン.*ヨーグルト
571デフォルトの名無しさん:2007/04/10(火) 21:48:02
grepで「hogeで始まる行以外」を抽出したいんですがどうすればよいんでしょうか?
一文字なら
grep "^[^h]" target > destination
みたいな感じですが。
572デフォルトの名無しさん:2007/04/10(火) 22:32:11
grep -v
573571:2007/04/10(火) 22:42:39
>>572
おお、どうもです
574デフォルトの名無しさん:2007/04/13(金) 00:00:33
URLのようなそれほど長くない文字列のリストを一気に検索したいのですが、
マッチしたかどうかだけが知りたくてマッチした文字列そのものはどうでも良い場合、
最短マッチと最長マッチではどちらの方が高速に動作するのでしょうか?
ご存じの方が居られましたらご教示頂けますと幸いです。よろしくお願いします。
575デフォルトの名無しさん:2007/04/13(金) 00:13:02
コストではもちろん最短だけどプログラムの作りによるから。
576デフォルトの名無しさん:2007/04/13(金) 00:26:10
ということは、単純にひとつの文字列を検索する場合は最短マッチの方が速いが
プログラムの設計によっては最終的な処理を終えた時点で逆転している可能性もあるという事ですね。
参考になりました。どうもありがとうございました。
577デフォルトの名無しさん:2007/04/13(金) 23:33:37
何を参考にしてんだか...

こういう奴が、単純にひとつの文字列を最短マッチで検索するのに
すげー遅いプログラムとか書いたりするんだろうな。
578デフォルトの名無しさん:2007/04/13(金) 23:49:30
>>577
自分がそういうプログラムを書かないという保証はありませんが、
今回の話に限れば他人が書いたプログラムで使われている正規表現の
最短/最長マッチの使い方が妥当だったのかどうかを知りたかっただけですので
ご心配なく。
579デフォルトの名無しさん:2007/04/13(金) 23:51:59
パール最強伝説ってのがあると聞きました 本当ですか
580デフォルトの名無しさん:2007/04/14(土) 00:32:37
>>578
まあ、「心配するな」って言ってるんだからいいか...。
581デフォルトの名無しさん:2007/04/14(土) 10:56:20
お前の方が心配だよ俺は。
582デフォルトの名無しさん:2007/04/21(土) 03:00:42
vimで ^abc\~\?\w\+$ という正規表現について考えているのですが理解できません。
\~は「最後に置換された文字列」と解説されてたのですがこの場合置換自体していません。
583デフォルトの名無しさん:2007/04/21(土) 04:32:48
>>582
magic オプションの設定によって意味が違うみたいだけどその辺は?
それでも \? がわからんな。
584デフォルトの名無しさん:2007/04/22(日) 02:18:41
安易なパスワードを禁止したくて、正規表現を色々と試行錯誤しているのですが、うまくいきません。
同じ文字が3文字以上続くようなパスワードを禁止したいのですが、このような正規表現は可能でしょうか?
585デフォルトの名無しさん:2007/04/22(日) 02:47:13
>>584
regexエンジンによってはできない。

正規表現に名前をつけて、あとから使い回せる構文があるならできる。
586デフォルトの名無しさん:2007/04/22(日) 03:11:37
>>585
そんなに難しいケースなんですか。
ちなみにPerlを使っています。Perlって正規表現に強いと聞いていましたけど・・・。
587デフォルトの名無しさん:2007/04/22(日) 04:20:53
>>586
本来の意味の「正規表現」からは思いっきり逸脱しているのよ > perl
んで、perlならこんな感じで検出できる。


while (<DATA>) {
    print if /(.)\1{2}/;
}

__END__
fooxxxbar
xyxxydd
foobarbaz
588デフォルトの名無しさん:2007/04/22(日) 08:40:40
> 本来の意味の「正規表現」からは思いっきり逸脱しているのよ

なんだまた前日知ったばかりの知識で薀蓄かよ
頭悪そう
589デフォルトの名無しさん:2007/04/22(日) 08:42:59
> 本来の意味の「正規表現」からは思いっきり逸脱しているのよ

なんだまた前日知ったばかりの知識で薀蓄かよ
頭悪そう
590デフォルトの名無しさん:2007/04/22(日) 12:51:13
本来の意味の「正規表現」って何?
591デフォルトの名無しさん:2007/04/22(日) 16:37:57
ドラゴンブックとか中田育男の本で正規表現の定義してる。

φ={1、3、5、7、9}とか例題出してるけど、
それって状態遷移図の上にある点の集まり。

パターン中のバックリファレンスは図面書けないから定義と違う。
なんつーんだろ、動作中に図面が完成するというもの。
592デフォルトの名無しさん:2007/04/22(日) 17:01:55
形式言語理論での正則表現か。

今更そんなものを持ち出すのも阿呆らしいけどな
593・∀・)っ-○◎●:2007/04/22(日) 18:06:43
有限オートマトン記述構文
594デフォルトの名無しさん:2007/04/22(日) 18:17:09
お前の自作自演はサッパリ意味不明だ
ここはお前の日記帳じゃないゾ
595・∀・)っ-○◎●:2007/04/22(日) 19:25:11
だんごやさんだよ
596デフォルトの名無しさん:2007/04/22(日) 20:12:41
団子ちゃんなら日記帳にしてもいいんですっ><
597デフォルトの名無しさん:2007/04/23(月) 02:04:47
団子チューさんが来たからにはこのスレも安泰だYO
598デフォルトの名無しさん:2007/04/23(月) 02:07:14
ググってみたらエロ同人誌の団子屋さん?が出てきたが

ttp://www5b.biglobe.ne.jp/~yew/index.html
599デフォルトの名無しさん:2007/04/23(月) 03:44:34
PHPで連続しないある1文字ならsplitというのをしたいのですが、うまくいきません。
abc@@aa@a@b123@@@@という文で@で区切りたい場合、
abc@@aa
a
b123@@@@
のように区切りたいのですが・・・
splist("@{1}",$str);では当然ながらだめでした。
600599:2007/04/23(月) 07:15:58
split("[^@]@[^@]",$str); だと
abc@@a
@b123@@@@
と周辺の文字も一緒に削ってしまうのでだめでした。
ああ、正規表現難しい・・・
601デフォルトの名無しさん:2007/04/23(月) 07:25:52
$arr = array();
foreach(preg_split('/(@+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE) as $t) {
if($t == '@') arr[] = ''; else arr[count(arr) - 1] += $t;
}
602デフォルトの名無しさん:2007/04/23(月) 07:57:16
肯定先読みと肯定後読みを使うんだ
603599:2007/04/23(月) 08:35:53
>>601
すいません、私の頭では理解できませんでした・・・コピペして使ってみたら
PHP Parse error: syntax error, unexpected '[' in [URL] ってでました

>>602
まさにやりたいことがそれみたいで、
$bufsplit = mb_split("(?<!@)@(?!@)", $buffer); と早速試してみたところ
PHP Warning: mb_split() [function.mb-split]: mbregex compile err: undefined (?...) sequence in [URL]
とでてしまいました。
PHP4だと使えないんですかね・・・orz
604デフォルトの名無しさん:2007/04/23(月) 09:26:21
>>603
$str = 'abc@@aa@a@b123@@@@';
var_dump(preg_split('/(?<!@)@(?!@)/', $str));
605デフォルトの名無しさん:2007/04/24(火) 01:44:29
>>603
PHP4 の mb_regex は鬼車になっていない。
ので戻り読みは使えない。
606デフォルトの名無しさん:2007/04/25(水) 17:01:17
与えられた有限オートマトンと等価な正規表現を求めるライブラリとか
どっかにないすか?

逆は簡単なんだけどなw
607デフォルトの名無しさん:2007/04/26(木) 08:05:24
608デフォルトの名無しさん:2007/05/02(水) 00:14:14
-------------------------
うんたらこうたら・・・
HOGE_START
00 1 2 3 4 5
11 6 7 8 9 10
22 11 12 13 14 15
HOGE_END
うんたらこうたら・・・
-------------------------

上のHOGE_STARTとHOGE_ENDの間の
データの00と1,11と6,22と11の部分の値を取得したい場合、
どのように記述すればよいでしょうか?
ちなみにこのHOGE_STARTとHOGE_ENDの間の行数は変動します。

補足です。
ウェブプログラマー初めて2年近くたつんですが、
正規表現が糞レベルから一向に上達しません。
なんとか苦労して使えば誤動作の嵐です。orz
習うより慣れろなんでしょうか?
609608:2007/05/02(水) 00:25:01
素朴な疑問なのですが、
特定のデータファイルから
規則性のある部分の一部データを抜き出したい場合、
正規表現を使うものなんでしょうか?

まさに608のようなケースなんですが、
このパターンの正規表現の苦手っぷりがひどいです。
610デフォルトの名無しさん:2007/05/02(水) 00:42:17
>>608
PCREな。
/(?<=HOGE_START\x0A|HOGE_START\x0D|HOGE_START\x0D\x0A)(.*?)(?=HOGE_END(?:\x0A|\x0D|\x0D\x0A))/s
にマッチする全体

PerlとかPHP使うならもっと単純な正規表現で十分だが。
611デフォルトの名無しさん:2007/05/02(水) 02:34:21
>>608
正規表現、つかawkあたりの出番じゃね?

awk '/HOGE_START/,HOGE_END/ {
最初と最後の行が入っちゃうけどお好みでデータを処理
}'

CGIとかでという話なら、Perlもおんなじことできるよ。
612デフォルトの名無しさん:2007/05/02(水) 03:20:52
>>609
まず行に分解して
固定長ならunpack関数、可変長ならセパレータの正規表現作って配列に分解して
何番目か数えればいいんじゃない?
613デフォルトの名無しさん:2007/05/04(金) 17:28:35
JavaScriptで
AAAA|BBBB|CCCC
という文字列を分解して
AAAA
BBBB
CCCC
という配列を正規表現で返したいのですが上手くいきません、
使った正規表現「(.*)[|]?(.*)[|]?(.*)」
いい方法ありませんか?
614デフォルトの名無しさん:2007/05/04(金) 18:06:59
split()じゃいかんの?正規表現を使わないですむし
615・∀・)っ-○◎●:2007/05/04(金) 19:53:38
最短マッチデフォだと全く捕獲しなくていいな
616デフォルトの名無しさん:2007/05/04(金) 22:25:31
「(.*)[|](.*)[|](.*)」で
AAAA|BBBB|CCCC
の場合
AAAA
BBBB
CCCC
を取得できたのですが
AAAA|BBBBになった場合
nullになってしまいます。・゚・(ノ∀`)・゚・。
「(.*)[|]?(.*)[|]?(.*)」
でも同じです。

>>614
正規表現を使用してやりたかったので・・・


617デフォルトの名無しさん:2007/05/04(金) 22:41:36
要素がnullの時に空にするだけじゃないか。
618・∀・)っ-○◎●:2007/05/04(金) 22:56:06
> (.*)[|]?(.*)[|]?(.*)

最短マッチだと文字列に全くマッチしないって理屈わかる?
619・∀・)っ-○◎●:2007/05/04(金) 23:03:13
(.+)(\|(.+)(\|(.+)・・・・))))

で奇数番目を取る。



でも素直にsplit使えよ
620デフォルトの名無しさん:2007/05/04(金) 23:13:21
/[^|]+/g

でも素直にsplit使えよ
621デフォルトの名無しさん:2007/05/04(金) 23:33:18
先読みを使って、Matches に入った AAAA、BBBB、CCCC を処理する
.*(?=\||$)

でも素直にsplit使えよ
622デフォルトの名無しさん:2007/05/05(土) 00:22:20
ありがとうございます。勉強になりました。

素直にsplit使うことにします。
623デフォルトの名無しさん:2007/05/07(月) 01:24:53
foo@localhost, "foo,bar,baz" <foobarbaz@lodalhost>, foobar@localhost

PHPなんですが、このようなリストがある場合にカンマ区切りで
値を取得するにはどうやれば良いのでしょうか。
但しダブルクォートの中の文字は分割したくないです。
624デフォルトの名無しさん:2007/05/07(月) 02:48:30
>>623
csvのデータだとみなして分割してやればいいんじゃね?
csvのハンドリングのサンプルは転がってるでしょ。
625デフォルトの名無しさん:2007/05/07(月) 20:02:16
>>623
それはリストが悪い。セパレータをタブとかにすべきだな
626デフォルトの名無しさん:2007/05/07(月) 20:37:18
Rubyっていいの?
627デフォルトの名無しさん:2007/05/07(月) 20:55:52
?
628デフォルトの名無しさん:2007/05/07(月) 21:38:16
>>625
しねよ
629デフォルトの名無しさん:2007/05/08(火) 00:50:16
>>628
あー、もうコイツ最悪だな!!!!
質問者として、態度悪すぎ
今後、>>623には一切レスなし
630デフォルトの名無しさん:2007/05/08(火) 01:41:21
自演乙
631デフォルトの名無しさん:2007/05/08(火) 18:58:54
「;」以前の空白、そして「;」以降の文字を指定したいんだけど
*;.*
とすると改行まで入ってしまう。どうすれば。
632デフォルトの名無しさん:2007/05/08(火) 19:00:14
入るじゃなくて「消える」の間違いでした。
633デフォルトの名無しさん:2007/05/08(火) 19:21:09
あんたの使ってる処理系では . が改行にマッチしないんでしょ
挙動を変更するオプションがあるかもしれんからマニュアル嫁
634デフォルトの名無しさん:2007/05/10(木) 22:57:23
正規表現で
「数列のみ もしくは 数字-数字-数字」

と言うのはどう書くですか?
635デフォルトの名無しさん:2007/05/10(木) 23:09:09
\d-\d-\d|\d+
636デフォルトの名無しさん:2007/05/10(木) 23:17:39
できました
637デフォルトの名無しさん:2007/05/10(木) 23:34:13
文章中の 小日向(こびなた と読む) とかの文字列で括弧内と括弧を指定したいんですけど 誰か教えてください。
638デフォルトの名無しさん:2007/05/11(金) 00:27:45
日本語未対応perlにてsjisで
^[ぁ-ん]+$
^[ァ-ヶ]+$
はどう書きますか?
639デフォルトの名無しさん:2007/05/11(金) 01:46:21
>>638
5.8以上でutf8で扱う
それ以外に方法はない
640デフォルトの名無しさん:2007/05/11(金) 02:31:54
^(?:\x82[\x9f-\xf1])+$
^(?:\x83[\x40-\x96])+$
641デフォルトの名無しさん:2007/05/11(金) 13:05:29
アクセスを解析するにあたってホストアドレスをある程度まとめたいのですが
(例えば test1.test.ne.jp→*.test.ne.jp)
その場合どのように表記すると良いでしょうか?
642デフォルトの名無しさん:2007/05/11(金) 14:51:48
全角文字ならヒットは出来ますか?
643デフォルトの名無しさん:2007/05/11(金) 16:39:01
>>641
^.+\.test\.ne\.jp$
644デフォルトの名無しさん:2007/05/13(日) 12:07:25
指定の文字列がないというのにマッチしたいのですが、いい正規表現はないでしょうか?

"HOGE MAGE"
"ARABIN DOBIN MAGE"
というのがあった場合、"DOBIN"が含まれていないつまり、"HOGE MAGE"のみをヒットさせたいです。
645デフォルトの名無しさん:2007/05/13(日) 12:25:00
mage を拾って dobin があるか 調査する
646デフォルトの名無しさん:2007/05/13(日) 15:01:16
>>644
その程度の処理なら態々正規表現を使うまでも無い
647・∀・)っ-○◎●:2007/05/13(日) 15:09:25
マッチする文字列を探すのとしないのを探すのって本質的な違いってある?
648デフォルトの名無しさん:2007/05/13(日) 15:21:57
のっと
649デフォルトの名無しさん:2007/05/13(日) 16:38:44
>>645
実際には、MAGEが共通じゃない場合もあり orz

>>646
んーと、確かに、そうなんだけど、
外部で弄れる設定が正規表現になってんだわ・・・

可搬性から、ソースの方をいじりたくないのです。


とおもって検索してたんですが

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

これ見ると、簡単に書く方法はないのですね・・・。
正規表現も万能なわけではないのか
650デフォルトの名無しさん:2007/05/13(日) 16:41:21
>>649
こちらに、含まない正規表現をジェネレータがありました。

正規表現メモ - ある文字列を含まない正規表現
http://www.kt.rim.or.jp/~kbk/regex/regex.html#NOTINCLUDED
651644=649=650:2007/05/13(日) 16:42:04
x こちらに、含まない正規表現をジェネレータがありました。
o こちらに、ある文字列を含まない正規表現を生成するジェネレータがありました。
652デフォルトの名無しさん:2007/05/13(日) 16:55:46
js弄りたい。

正規表現なるモノが解らないと少しの改変すら困難なようだ。

そうだ2chでスレを探そう

発見ナニこのスレ暗号!?

1のサイトを見よう!

脳沸騰中 ←今ココ○| ̄|_
653デフォルトの名無しさん:2007/05/13(日) 17:31:22
日記はチラシの裏へ
654デフォルトの名無しさん:2007/05/28(月) 01:09:39
ここがチラシの裏だろ
655デフォルトの名無しさん:2007/05/28(月) 01:41:17
何その2週間もかけたツッコミw
のんびりした板だねここは
656デフォルトの名無しさん:2007/05/29(火) 23:09:08
そうでもないよ
657デフォルトの名無しさん:2007/05/30(水) 11:40:44
正規表現で数値チェックしています。
0〜15までの数値がOKという処理をしたいのですがうまくできませんでした。
[0-9]+[0-9]*
など考えたのですが
二桁の数値の場合、例えば19、一桁目の1にマッチしてしまうようで
本来NGにしたいのですがOKになってしまいます。
0〜15までの数値はOK。他はNG。というような正規表現はどうやって書けるのでしょうか?
658デフォルトの名無しさん:2007/05/30(水) 11:44:09
訂正、3行目
[0-9]+[0-5]*
です。
659デフォルトの名無しさん:2007/05/30(水) 11:46:16
(1[0-5]|[0-9])
660デフォルトの名無しさん:2007/05/30(水) 12:56:46
正規表現の練習・確認用に
(
 1[0-5] |
 [0-9]
)
とか書くとエディットボックスに
(1[0-5]|[0-9])
と連結されて
さらにターゲットとなるテキストでマッチした行を抜き出す。
といったアプリというかGUIツールってないですかね。
それくらい自分で作ればいいんですけど・・・
661デフォルトの名無しさん:2007/05/30(水) 14:42:48
たしかどっかのサイトにあった
URL 思い出せないけど検索したら出るだろ
662デフォルトの名無しさん:2007/05/30(水) 16:47:30
>>21-22 はちょっとそれっぽい。
663デフォルトの名無しさん:2007/05/30(水) 22:37:30
どうしてエディタの置換にスクリプトが使えないのは何故なんだぜ?
664デフォルトの名無しさん:2007/05/30(水) 22:39:14
それは安物だから
665デフォルトの名無しさん:2007/05/31(木) 09:42:26
プログラミングにメモ帳使うのはもうやめような。
666デフォルトの名無しさん:2007/05/31(木) 11:43:10
メモ帳って

「右端で折り返す」チェックしてて
実際行が長くて折り返されてるファイルを
うっかり上書きで保存してしまうと
勝手に改行挿入されて行が分かれるよねw

前はそんなことなかったのになぁ
いつからだろ
667デフォルトの名無しさん:2007/05/31(木) 11:45:48
メモ帳ができてから。少なくともWin3.1のときには既にそうだったと記憶している。
668デフォルトの名無しさん:2007/05/31(木) 12:03:29
readme.txtビューアに多くを期待しすぎだ
669657:2007/05/31(木) 12:36:29
再度質問なのですが、教えていただいた正規表現でチェックを掛けているのですが
どうも抜けてしまいます。
どこがおかしいのでしょうか。。phpで書いています。
if(!ereg("(1[0-5]|[0-9])",$chk){
//エラー処理
}
670デフォルトの名無しさん:2007/05/31(木) 12:44:51
^(1[0-5]|[0-9])$ とか
671デフォルトの名無しさん:2007/05/31(木) 14:44:51
(^|\D)(1[0-5]|[0-9])(\D|$)
とかか。こういうのはあまり正規表現でがんばらずに(\d+)で拾って範囲判定したほうが手っ取り早いと思うが。
672657:2007/05/31(木) 16:11:41
>>670,671
お二方どちらでもできました。
チェック関連を正規表現で統一したかったので頑張ってました^^;
ありがとうございました。
673デフォルトの名無しさん:2007/05/31(木) 22:14:09
>>671
俺もそう思う。

(1[0-5]|[0-9]) を見て、ぱっと 0 〜 15 を思い浮かべられる奴はそうそういない。

趣味でやってるなら余計なおせっかいだけどね。
674デフォルトの名無しさん:2007/05/31(木) 22:29:56
(0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15) が可読性を考えるとベストだなw
675デフォルトの名無しさん:2007/05/31(木) 22:44:11
>>674
逆にその発想はなかったwwwww
676・∀・)っ-○◎●:2007/05/31(木) 22:44:27
てか逆の方が読みやすい

([0-9]|1[0-5])
677デフォルトの名無しさん:2007/05/31(木) 23:00:39
>>676
10以上にマッチしない
678デフォルトの名無しさん:2007/06/01(金) 00:46:56
そんなことはない
679デフォルトの名無しさん:2007/06/01(金) 00:59:29
K2Editorで改行のみの行が複数続いた場合、
1行のみ残したいのですが、どうしたらよいでしょう?
"^\n"→""と置換すると1行目と5行目がくっついてしまいます。。

(1行目)│正規
(2行目)│
(3行目)│
(4行目)│
(5行目)│表現



(1行目)│正規
(2行目)│
(3行目)│表現

680デフォルトの名無しさん:2007/06/01(金) 01:04:49
\n{3,} -> \n\n とか?

つこうたことないから知らんけど。
681デフォルトの名無しさん:2007/06/01(金) 13:13:31
"^\n+" ⇒ "\n"

だめ?
682デフォルトの名無しさん:2007/06/01(金) 15:26:17
つうかエヂタスレで聞け
683デフォルトの名無しさん:2007/06/02(土) 17:04:06
[\w\.\/\?\-]+を[\w\.\/\?-]と書く奴死ね

ハイフンはエスケープしなくても通用するが
ゴチャゴチャするからエスケープ文字が連続してるところでは
1文字ずつエスケープするのが常識なんだよ
684デフォルトの名無しさん:2007/06/02(土) 17:17:14
[\w./?-]
685デフォルトの名無しさん:2007/06/02(土) 17:32:51
一番最後にハイフンがあれば\-か単独の-に決まってるだろ。
そのくらいでゴチャゴチャとか言うなよ能無し
686デフォルトの名無しさん:2007/06/02(土) 20:34:47

[\w\.\/\?-]

↓機能追加するとき

[\w\.\/\?-0-9]

ってやってしまうとどうなるの?
687デフォルトの名無しさん:2007/06/02(土) 21:29:57
もう[-\w\.\/\?]でいいよ。
688デフォルトの名無しさん:2007/06/02(土) 21:52:30
[\^ w ^\]vでいいよ
689デフォルトの名無しさん:2007/06/02(土) 22:11:36
>>686
そんな無能がいる会社なら珍妙な書き方をするのも止むを得んな。
690デフォルトの名無しさん:2007/06/02(土) 22:23:25
だいたい、正規表現を許可してるコーディング指針を決定した会社の質を疑うね。
まともな会社は正規表現禁止ってのも多い。

趣味でウェブプログラミングするくらいなら好きにすればいいけど。
691デフォルトの名無しさん:2007/06/02(土) 22:39:35
劣悪な環境下での重労働ご苦労様です。
692デフォルトの名無しさん:2007/06/02(土) 22:51:20
べんきよになります
693デフォルトの名無しさん:2007/06/02(土) 23:42:48
color(red blue)やcolor(red blue black)やcolor(red bule black green)

となったときに
()の中の色を別々にとりだせますでしょうか??
694デフォルトの名無しさん:2007/06/03(日) 00:29:10
任意個数と言うのは無理だが上限決めてがんばればできなくもない。

でもそんな無駄な努力をしてる暇があったら、カッコの中をまとめて
取り出してからsplitした方が楽。
695デフォルトの名無しさん:2007/06/03(日) 01:35:10
正規表現使用禁止なんていわれたらその会社辞めるな・・・
696デフォルトの名無しさん:2007/06/03(日) 02:04:08
>>694
任意個数は無理ですよね。アドバイスありがとうです。
splitを勉強してまいります。
697デフォルトの名無しさん:2007/06/03(日) 04:18:05
>>683
出遅れたが、俺は683にあるような無用なエスケープをつけまくるほうが嫌いだ。
-に関しては譲歩の余地はあるけどね。
698デフォルトの名無しさん:2007/06/03(日) 17:27:48
bregexp.dllで
char *target = "";
if(BMatch("/\\w+/", target + str(target), breg, msg)) printf("err:%s\n", msg);
とやると
err:invalid target parameter
となってしまうんですが、tagetが空文字列のときはマッチさせない(というかエラーを出さない)ようにはできないですか?
699デフォルトの名無しさん:2007/06/03(日) 20:24:39
strlen(target)
700デフォルトの名無しさん:2007/06/03(日) 23:54:10
1行のif構文でも{}きちんとつけない奴死ね
701デフォルトの名無しさん:2007/06/04(月) 00:15:55
ぱいそんとかるびーがたいへんなことに!
702デフォルトの名無しさん:2007/06/06(水) 17:44:53
パーサ書けるようになるにはどんな本を読んだらいいでつか?
703デフォルトの名無しさん:2007/06/06(水) 17:58:36
ドラゴンブック
704デフォルトの名無しさん:2007/06/06(水) 18:24:11
をを!やっぱりコンパイラ関連の本ですか。じつは「コンパイラの理論と実現」という本を
昨日注文しちゃったんですが、この本でも桶?
705デフォルトの名無しさん:2007/06/06(水) 19:19:22
翻訳した文章を読むのが辛い人は中田育男
数列を解読するのが辛い人はドラゴンブック
706デフォルトの名無しさん:2007/06/06(水) 19:45:02
>>705
どうもです。キャンセルできたんで、もう少し検討してみます。
707デフォルトの名無しさん:2007/06/06(水) 21:55:36
AHO
708デフォルトの名無しさん:2007/06/07(木) 16:30:09
>>707
一瞬ばかにされたかと思ったら、コンパイラの本のことか・・・
709デフォルトの名無しさん:2007/06/07(木) 16:39:47
AHO本ゆうべ注文しましたよ^^
710デフォルトの名無しさん:2007/06/07(木) 22:06:27
Rubyで2ちゃんねる専用ブラウザ(ギコナビ)のログを1行ずつ読んで、
名前、メール欄、日付、曜日、時刻、ID、その他(BEなど)、本文、スレタイ
以上を後方参照で使えるようにするにはどのように表現したら良いでしょうか?
以下にとあるスレのログサンプルを置いておきます。

名無しさん<>sage<>2007/06/07(木) 21:57:04 ID:???<> <a href="../test/read.cgi/kitchen/1181221024/1" target="_blank">>>1</a> <>専用ブラウザのログのテスト
a<><>2007/06/07(木) 21:57:52 ID:7FjnB1uN<> http://2ch.net/ <>
名無しさん<>sage<>2007/06/07(木) 21:58:35 ID:??? BE:10425941-2BP(2059)<> 改行 <br> と <br> BEのテスト <>
</b>◆h67iCpDPo. <b><>sage<>2007/06/07(木) 21:59:30 ID:???<> トリップテスト <>
711デフォルトの名無しさん:2007/06/07(木) 22:13:39
念のため補足です。

名前<>メール欄<>日付(曜) 時刻 ID その他<> 本文<>スレタイ
で表され、メール欄、ID、その他、スレタイは投稿内容や板の設定によっては空欄の可能性があります。
712デフォルトの名無しさん:2007/06/07(木) 22:24:09
Rubyはしらねえけど、普通に<>でsplitすりゃいいんでないの?
713デフォルトの名無しさん:2007/06/07(木) 22:35:03
Ruby初心者スレ池
714719:2007/06/07(木) 22:35:51
>>712
なるほど…'<>'で5つに分けて、
その後真ん中を' 'でもう一度splitすれば行けそうですね。
IDが無かった場合などの例外処理などが面倒そうですがちょっと試してみます。
715710:2007/06/07(木) 22:38:06
名前欄間違えてた…

>>713
環境の問題などがあるかもしれないので「Ruby」と書いたのですが、
可能ならば正規表現で取り出したかったので…

スレ違いなら申し訳ない。
716デフォルトの名無しさん:2007/06/08(金) 07:42:48
\w+にマッチし、例外的にfooにはマッチしない
というのはすんなり書けないものですかね。
717デフォルトの名無しさん:2007/06/08(金) 08:39:38
grep -v fooしてから処理。
718デフォルトの名無しさん:2007/06/09(土) 20:44:03
<table>
<tr>
<td>あああ</td>
</tr>
<tr>
<td>いいい</td>
</tr>
</table>

という$htmlがあって消したい部分は
<tr>
<td>bbb</td>
</tr>
の3行です
いろいろ検索などして
$html = preg_replace("/<tr>.+?[^<tr>].+?いいい.+?<\/td>/is", "", $html);
とやってみたのですが最初の<tr>からずばっと消えてしまいます

phpなのですが、ご教示いただけないでしょうか
719デフォルトの名無しさん:2007/06/09(土) 22:11:17
>[^<tr>]
アチャー
720デフォルトの名無しさん:2007/06/09(土) 23:29:44
          人
         / 0.ヽ
         // ||ヽヽ
        (( / ヽ))
         ヽヽ//
          ヽ/   
721デフォルトの名無しさん:2007/06/10(日) 03:21:26
あのさ、最初の例のどこに消したいという bbb を内容にもっているtd があるの? 
もうちょっとどういうテキストを扱いたいのか考えてみ。

そこに書いているのだけから考えると、改行をパターンに
入れときゃいいだけじゃないの?
<tr>\n<td>....
みたいに。


722デフォルトの名無しさん:2007/06/10(日) 11:21:46
>>720
経産婦
723デフォルトの名無しさん:2007/06/10(日) 15:05:37
どうもすみません

<table> <tr><td>あああ</td></tr> <tr><td>***</td><td>いいい</td></tr> </table>

本当は改行やスペースなどが入っているのですが、
“いいい“から左方向に一番近い <tr> から、右方向に一番近い </tr> までの

<tr><td>***</td><td>いいい</td></tr>

の部分を消したいです
よろしくお願いいたします
724デフォルトの名無しさん:2007/06/10(日) 15:17:02
正規表現でやろうとするのが間違ってる
725デフォルトの名無しさん:2007/06/10(日) 16:00:21
テンプレの>>1のPerl正規表現雑技にある

ある文字列とある文字列を含むものにマッチする正規表現

(?=.*foo)(?=.*bar)
(?=.*foo)(?=.*bar)(?=.*hoge)

てのはPerlでない場合には

(.*foo)?(.*bar)?
(.*foo)?(.*bar)?(.*hoge)?

こうなるんでしょうか?
それとも別の表現にしないといけないの?


726デフォルトの名無しさん:2007/06/10(日) 18:08:09
>>723
PHPはよくわからないがPerlならこう書く
$html=~s{<tr><td>[^<]+</td><td>\Qいいい\E</td></tr>}{}

だが厳密にはこう書くかな
$html=~s{<table>(.*?)</table>}{
 my $lines;
 for ($1 =~ m{\s+<tr>.*?</tr>\s+}g) {
  $lines .= $_ unless m/\Qいいい\E/;
 }
 "<table>$lines</table>";
}eg;
727デフォルトの名無しさん:2007/06/10(日) 20:02:30
>>725
(foo.*bar|bar.*foo)
(foo.*(bar.*hoge|hoge.*bar)|bar.*(foo.*hoge|hoge.*foo)|hoge.*(foo.*bar|bar.*foo))
728デフォルトの名無しさん:2007/06/10(日) 21:10:25
>>727
(?=.*a)(?=.*b)(?=.*c)(?=.*d)(?=.*e)はどうなりますか?
729デフォルトの名無しさん:2007/06/10(日) 21:15:21
(a.*(b.*(c.*(d.*e|e.*d)|d.*(c.*e|e.*c)|e.*(c.*d|d.*c))|c.*(b.*(d.*e|e.*d)|d.*(b.
*e|e.*b)|e.*(b.*d|d.*b))|d.*(b.*(c.*e|e.*c)|c.*(b.*e|e.*b)|e.*(b.*c|c.*b))|e.*(b
.*(c.*d|d.*c)|c.*(b.*d|d.*b)|d.*(b.*c|c.*b)))|b.*(a.*(c.*(d.*e|e.*d)|d.*(c.*e|e.
*c)|e.*(c.*d|d.*c))|c.*(a.*(d.*e|e.*d)|d.*(a.*e|e.*a)|e.*(a.*d|d.*a))|d.*(a.*(c.
*e|e.*c)|c.*(a.*e|e.*a)|e.*(a.*c|c.*a))|e.*(a.*(c.*d|d.*c)|c.*(a.*d|d.*a)|d.*(a.
*c|c.*a)))|c.*(a.*(b.*(d.*e|e.*d)|d.*(b.*e|e.*b)|e.*(b.*d|d.*b))|b.*(a.*(d.*e|e.
*d)|d.*(a.*e|e.*a)|e.*(a.*d|d.*a))|d.*(a.*(b.*e|e.*b)|b.*(a.*e|e.*a)|e.*(a.*b|b.
*a))|e.*(a.*(b.*d|d.*b)|b.*(a.*d|d.*a)|d.*(a.*b|b.*a)))|d.*(a.*(b.*(c.*e|e.*c)|c
.*(b.*e|e.*b)|e.*(b.*c|c.*b))|b.*(a.*(c.*e|e.*c)|c.*(a.*e|e.*a)|e.*(a.*c|c.*a))|
c.*(a.*(b.*e|e.*b)|b.*(a.*e|e.*a)|e.*(a.*b|b.*a))|e.*(a.*(b.*c|c.*b)|b.*(a.*c|c.
*a)|c.*(a.*b|b.*a)))|e.*(a.*(b.*(c.*d|d.*c)|c.*(b.*d|d.*b)|d.*(b.*c|c.*b))|b.*(a
.*(c.*d|d.*c)|c.*(a.*d|d.*a)|d.*(a.*c|c.*a))|c.*(a.*(b.*d|d.*b)|b.*(a.*d|d.*a)|d
.*(a.*b|b.*a))|d.*(a.*(b.*c|c.*b)|b.*(a.*c|c.*a)|c.*(a.*b|b.*a))))
730デフォルトの名無しさん:2007/06/10(日) 22:34:44
>>727
順番を考慮したパターンを書かないといけないんだね。
ありがとう。
731デフォルトの名無しさん:2007/06/10(日) 23:51:39
>>723(元レスは多分718ってことで)ってphpの正規表現では
出来ないのかな。
perlの例は726が書いてるけど、phpだったらstrposとかで
該当する部分を切り出しておいて投げる、みたいなことを
しなくちゃいけないのかなあ。

#うちもperl→phpにシフトする案件が結構増えてるんですさん。
732デフォルトの名無しさん:2007/06/11(月) 00:15:37
>>723
正規表現だけでは出来そうで出来ない
プログラマ脳では出来そうなんだけどね
733デフォルトの名無しさん:2007/06/11(月) 00:35:33

こんなこともできないのか〜〜〜〜〜〜、正規表現

734デフォルトの名無しさん:2007/06/11(月) 00:37:59
適材適所
735デフォルトの名無しさん:2007/06/11(月) 00:39:02
というかネストに制限の無いような対象は正規表現の最も苦手とする分野の一つだろう。
736デフォルトの名無しさん:2007/06/11(月) 00:40:07
そもそも本来の正規表現はネスト扱えねえし。
737デフォルトの名無しさん:2007/06/11(月) 06:04:47
どこで聞けばいいのかわからないのでここで質問させてください。

文字実体参照にマッチさせるにはどうしたらいいんでしょう?
「hoge」 にも 「ho&#8206;ge」 にも 「h&#lrm;o&#8207;g&#rlm;e」 にもマッチするような…
738デフォルトの名無しさん:2007/06/11(月) 09:31:58
hoge|ho&#8206;ge|h&#lrm;o&#8207;g&#rlm;e
739デフォルトの名無しさん:2007/06/11(月) 10:01:04
レスさんくすです。でもちょっと違ってて、
737はあくまで例で、どんな実体参照の一文字が入っててもOK、見たいなこと出来ませんか?

h?o?g?eの正規表現版みたいな感じで…
740デフォルトの名無しさん:2007/06/11(月) 12:33:45
普通は、実体参照を解決するフィルター通してから処理しない?
或いは逆に、全て実体参照にしてから処理するかw
741デフォルトの名無しさん:2007/06/11(月) 16:57:58
/h(&.+;)?o(&.+;)?g(&.+;)?e/
742デフォルトの名無しさん:2007/06/11(月) 18:54:24
>>741
さんくすぅ!思ったとおりの動作になりました

>>740
JaneでNGワードに指定しても、文字間に実体参照入れてNGを回避してくる輩がいるもんで…
743デフォルトの名無しさん:2007/06/11(月) 18:59:48
/Se(&&'xEFcs):;SEXswd$3"#11!-~|^-Grvdxa?>0./-feFDCSexf%&(=-#%b,/
744ぴかちゅう:2007/06/12(火) 13:49:07
文字列がルール部に記載されている2つ以上のパターンに一致する場合、lexではどのような規則で一致するパターンを一意に決めているかどうかってどういった意味かわからないんですが…
教えてください!
745デフォルトの名無しさん:2007/06/12(火) 13:59:58
>>744
なんかの課題か?

746デフォルトの名無しさん:2007/06/12(火) 14:02:38
flexのマニュアルに書いてあるから読めよ
747ぴかちゅう:2007/06/12(火) 14:02:39
学校の課題なんです…
748ぴかちゅう:2007/06/12(火) 14:06:35
マニュアルってどこにあるんですか?
749デフォルトの名無しさん:2007/06/12(火) 16:44:46
ぐぐれ。
ですませたいところだが別のflexが
ひっかかるようだからサービスしておこう

http://www.asahi-net.or.jp/~wg5k-ickw/html/online/flex-2.5.4/flex_toc.html
750デフォルトの名無しさん:2007/06/16(土) 23:16:15
「私のことが私のことが」「試験場試験場」

みたいな3語以上の表現の繰り返しを探したいんですが、
正規表現チェッカーというソフトでは

(.+)(.+)\1\2

で、抜き出されるんですが、Devasというソフトだとmax regex search depth
 exceededとエラーが出ます。神様、お導きを・・・
751デフォルトの名無しさん:2007/06/16(土) 23:57:18
>(.+)(.+)\1\2
それだと2文字以上の繰り返しのような気が。
(...+)\1
だとどう?
752750:2007/06/17(日) 00:23:11
レスサンクスです。

> (...+)\1

これもだめですー。(><)
753デフォルトの名無しさん:2007/06/17(日) 00:31:24
複数ファイルの置換ならDevasの代わりに
speeeeed + bregonig.dll を使うとか。
754デフォルトの名無しさん:2007/06/17(日) 02:59:34
>>750
どのくらいの大きさのファイル食わせた?
エラーメッセージからすると、バックトラック用に積んでいたスタックが
あふれたという感じだけど。

750のパターンでも、751でもマッチする文字列が見つからない場合にバックトラック用に
スタックに積んでくのは結構な寮になると思うぞ。
検索する語の最大長を指定するなりしてはどうか。
そのツールでできるかは知らんがね。

755デフォルトの名無しさん:2007/06/17(日) 05:10:23
(.+)(.+)\1\2


これが乳房AAに見えて仕方ない。orz
756デフォルトの名無しさん:2007/06/17(日) 06:21:58
いや、おれは 21エモンにでてくるゴンスケとかいうロボット。
ついでにいうと、NHK大阪の夕方の女子アナの顔な。
757デフォルトの名無しさん:2007/06/17(日) 13:48:58
おお、確かにゴンスケにみえるw
758デフォルトの名無しさん:2007/06/17(日) 13:57:12
斜め上のところに陥没があるおっぱい=乳癌
759750:2007/06/17(日) 14:00:34
レスサンクスです。

>>753
探して使ってみます。

>>754
一つのファイルは100〜500kくらいですが、フォルダ内のファイル全部では330Mほどになりますです。Devas以外ではKWIC Finderというのを使っていて、こちらは完全にプログラムが落ちます。

>検索する語の最大長

なるほど。ありがとうございます。
760デフォルトの名無しさん:2007/06/18(月) 14:29:50
「★」のある文字列には一致するけど、
「@株主 ★」があると一致しない正規表現を教えてください。
761デフォルトの名無しさん:2007/06/18(月) 17:17:04
(?<!@株主 )★
762デフォルトの名無しさん:2007/06/18(月) 17:33:56
ぼくの肛門も性器です
763デフォルトの名無しさん:2007/06/18(月) 17:37:10
ごめんなさい、JavaScriptで使うから戻り読み使えないんです。別の方法ありますか
764デフォルトの名無しさん:2007/06/18(月) 18:14:02
>>763
書けるけどすごくめんどくさいよ。

「a」があるけど「xya」がない文字列ならこんな感じ。文字数ふえても
同じようなやりかたでいけるはず。

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

「★」があるかどうかの判定と「@株主 ★」がない判定の2つに分ける
ことをオススメする。
765デフォルトの名無しさん:2007/06/18(月) 18:32:05
>>764
できました!
^([^★]*(((([^@]|^)株|[^株]|^)主|[^主]|^) |[^ ]|^)★)+[^★]*$
ブラウザの設定を弄ってるのでそういった分岐は書けないんです。助かりました。
766デフォルトの名無しさん:2007/06/18(月) 20:48:10
WindowsXPの標準テキストエディタである、NotePad上の文字列を
正規表現(自分で作ったルール)を使って文字列を変換すると、

パソコンで表現



パャRンで阜サ

のように変換されてしまいます。

これは、自分で作った変換ルールに誤りがあるからでしょうか?
変換には、クリップボード拡張ソフト「ペースター」のv3.08を使っています。

変換ルールは
s/^\s+|\n+|\\|\/|\:|\,|\;|\?|\"|\<|\>|\|//gm
です。
これは、Web上の文字列を、そのままコピペしてWindows上のフォルダ名にしたい時に、
(フォルダ名として)不適切な文字(\/:,;*?"<>|)や、他に、改行、空白を取り除く事を目的としています。

どのようにすれば改善されるか分かる方いませんか?
767デフォルトの名無しさん:2007/06/18(月) 21:14:01
いつからメモ帳は正規表現をサポートするようになったんだ?
768デフォルトの名無しさん:2007/06/18(月) 21:25:26
>>767
文盲ワロタw
769デフォルトの名無しさん:2007/06/18(月) 21:40:08
>>766
改善っていうか、それは正しく稼働した結果じゃねーの?

パソコンで表現
8370 835C 8352 8393 82C5 955C 8CBB
パャRンで阜サ
8370 83-- 8352 8393 82C5 95-- 8CBB

shiftjisのコードから、0x5Cが排除された結果みたいだし
770デフォルトの名無しさん:2007/06/18(月) 22:47:31
シェアウェアの癖にマルチバイトに非対応ってこと?
771デフォルトの名無しさん:2007/06/18(月) 22:56:57
テンプレサイトを見ればわかるが完全に近い漢字対応はむしろ少数派で
何かしら制約やら性能低下を伴うのが普通。
例外が鬼車とかboostとかなわけで。

GNU grepのdfa.c見てるけど歴史の呪縛感じるなぁ。
772デフォルトの名無しさん:2007/06/18(月) 23:55:57
しょぼいシャーウェイにするぐらいなら秀丸にすればよいのに
773デフォルトの名無しさん:2007/06/19(火) 00:01:54
言わしてもらうと正規表現エンジンのような
細かい設計と精密なデバッグを要求する職人芸は
商用ソフトでは採算が取れないだろう。

気の遠くなるような時間を浪費できるフリーソフトならではの世界w
774デフォルトの名無しさん:2007/06/19(火) 10:38:37
文字列絡みはテストケース書きやすい方だと思うが
775766:2007/06/21(木) 01:06:31
みなさんレスありがとうございます。
アプリ側の限界という結論になるのでしょうか?
仕方ないですね。

2chブラウザJaneを使っているんですが、更新チェックしていたつもりが、
なぜかこのスレだけチェックされていませんでした。
返信がおそくなってすいませんでした。
776デフォルトの名無しさん:2007/06/21(木) 14:46:11
>>775
んーと、そのソフトの仕様的に可能なのかはわかんないけど、
Shift_JIS に合致するモノは残す、という方針でいけないかな?

s/(([\w\d\xA1-\xDF\!\#\$\%\&\'\(\)\+\-\.\=\@\[\]\^\_\`\{\}\~]|[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc])|(.))/\2/gm;
777デフォルトの名無しさん:2007/06/22(金) 01:54:42
まるでEmacsLispでの正規表現見るような\の群れだな…
778デフォルトの名無しさん:2007/06/22(金) 09:15:21
オブジェクト指向正規表現マダー?
779デフォルトの名無しさん:2007/06/22(金) 09:58:43
>>777
だよね・・・
最初エスケープ付けずに書いてたんだけど、
どの文字がエスケープ不要でどの文字が必要かあやふやだったので、
いっそのこと、全てに付けた方がすっきりすると思ってあんなコードに・・・

問題: A と等価な正規表現になるように B を必要最小限エスケープして下さい (持ち込み不可)
A: /[\!\#\$\%\&\'\(\)\+\-\.\=\@\[\]\^\_\`\{\}\~]/
B: /[!#$%&'()+-.=@[]^_`{}~]/
780デフォルトの名無しさん:2007/06/22(金) 10:16:35
>>779
宿題はスレ違い
781デフォルトの名無しさん:2007/06/22(金) 10:18:55
>>779
/[\Q!#\$\%&'()+-.=\@[]^_`{}~\E]/
782デフォルトの名無しさん:2007/06/22(金) 11:01:35
>>780
最新十数レスぐらい読もうよ
783デフォルトの名無しさん:2007/06/22(金) 11:03:47
>>781
残念ながら間違い。ね、難しいでしょ?
よっぽど Perl に精通してるならともかく、そうでないのなら、
全てエスケープする、というルールの方がずっとシンプルで良いと思うんだけどなあ。
まあ、時と場合によって使い分けも必要かなとも思うけど。
784デフォルトの名無しさん:2007/06/22(金) 13:21:05
で、正解は?
785デフォルトの名無しさん:2007/06/22(金) 13:22:12
[^_`]/
786デフォルトの名無しさん:2007/06/22(金) 13:34:39
/[!#\$%&'()+\-.=@[]^_`{}~]/
787779:2007/06/22(金) 17:30:13
>>784
すみません、出題しといてなんですが、私には難しくてわかりません。
エスケープしない派の方、教えて下さい。

こうかなあ?間違ってそうだなあ。
/[!#\$%&'()+\-.=@[\]^_`{}~]/

順番入れ換え可ならもっと短くなるかな。
/[]!#\$%&'()+.=@[^_`{}~-]/
788デフォルトの名無しさん:2007/06/22(金) 18:30:50
実際に使えばすぐ分かるよ
789デフォルトの名無しさん:2007/06/22(金) 19:51:55
なるほど。
すると、このスレで実際に使ってる人はあまりいないようですね・・・
790デフォルトの名無しさん:2007/06/22(金) 21:04:05
逆にエスケープつけると演算子に変わるのがある。

sedの/\(A\)/はRubyの/(A)/と同じ。
sedの/(A)/はRubyの/(A)/と同じ。

だから、ムダにエスケープ付けるなが正解だし
プログラム作る人の都合だからどっちが真実でもないw
791デフォルトの名無しさん:2007/06/22(金) 21:04:48
ちょと打ち間違いw
sedの/(A)/はRubyの/\(A)\/と同じ。
792デフォルトの名無しさん:2007/06/22(金) 21:07:45
>>783
>>781のどこが間違い?
793デフォルトの名無しさん:2007/06/23(土) 00:02:41
>>790
> だから、ムダにエスケープ付けるなが正解だし

正解と言えるかなあ?
Ruby を引き合いに出してるみたいだから言及するけど、
「記号を全て \ でエスケープする」というルールにしておけば、
Perl でも Ruby でも同じ正規表現が使える、という利点もあります。

めんどくさいルールを覚えなくてもとにかく全部 \ エスケープすればいい、
という仕様は lwall の優しさだと思っているんですが、どうでしょうか?

>>792
実際に使えば・・・、じゃなくて、実際にテストすればわかると思いますが、
$ や @ はエスケープしないと変数展開されてしまいますが、
エスケープしたらしたで今度は '\$' や '\@' というリテラル文字列として扱われ、
文字クラスに '\' が含まれてしまうことになります。
詳しくは perldoc perlre にそのものずばり書いてますのでそちらを参照ください。
ねえ、だから難しいんですってば。
794デフォルトの名無しさん:2007/06/23(土) 00:31:12
>>793
>>781をもう一度目ぇかっぽじってよく見てみろ
795デフォルトの名無しさん:2007/06/23(土) 00:32:01

エスケープしたら…以降読んでなかった
目ぇかっぽじって読むのは自分だった
796デフォルトの名無しさん:2007/06/23(土) 00:34:15
謝るの忘れてた
ごめん
797デフォルトの名無しさん:2007/06/23(土) 02:14:51
794はツンデレ
798デフォルトの名無しさん:2007/06/23(土) 03:15:14
>>793
メタ文字を、記号の場合はすべて\の前置なし、アルファベットは前置するとしたのは
lwallのえらいところだと思うけどね。

ブラケットの中では
・記号類のメタ文字無効
・] と - は置き場所によってはエスケープ不要
・delimiterによってjは / をエスケープする必要がある
・interpolationを防ぐため$ をエスケープしておいたほうが良い
てとこ?

Cのカッコと同じで、わかりやすくするためにつけたい奴はつければいいんじゃないの?
俺はそういうやり方は好かないどね。

> エスケープしたらしたで今度は '\$' や '\@' というリテラル文字列として扱われ、 
> 文字クラスに '\' が含まれてしまうことになります。 
> 詳しくは perldoc perlre にそのものずばり書いてますのでそちらを参照ください。 

\も含まれてしまうというこれ再現しないんだが(ActivePerl 5.8.8)。
あとpetlreのどの辺りなのかも教えてくんなまし。
それらしいところが見当たらない。
799デフォルトの名無しさん:2007/06/23(土) 06:31:01
文字コードで指定するんじゃだめなん?
\xとか\uとか
800デフォルトの名無しさん:2007/06/25(月) 10:01:25
>>798
> \も含まれてしまうというこれ再現しないんだが(ActivePerl 5.8.8)。

マジっすか?
漏れがテストに使ったコードを貼っておきます。

my $src = <DATA>; chomp($src);
my $exp = $src;
$exp =~ s/[\!\#\$\%\&\'\(\)\+\-\.\=\@\[\]\^\_\`\{\}\~]//gm;
my $dst = $src;
$dst =~ s/[\Q!#\$\%&'()+-.=\@[]^_`{}~\E]//gm;
print "EXP: [$exp]\n";
print "DST: [$dst]\n";
printf "%s\n", ($dst eq $exp) ? "OK" : "NG";
__END__
1A!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

> あとpetlreのどの辺りなのかも教えてくんなまし。

| You cannot include a literal "$" or "@" within a "\Q" sequence. An
| unescaped "$" or "@" interpolates the corresponding variable, while
| escaping will cause the literal string "\$" to be matched. You'll need
| to write something like "m/\Quser\E\@\Qhost/".
801デフォルトの名無しさん:2007/06/25(月) 16:01:13
まて。
そりゃブラケットの外の話だろう。
ブラケットの中では、記号で表されるメタ文字は
二つの例外を除けば普通の文字だから
\Qとか使う必要ないって。つか無意味。
逆にこれをしているせいで\もマッチするように
なってしまっている。

perlreのversion 8 Regular Expressionの
三番目のパラグラフのあたりをよく読んでごらん。
802デフォルトの名無しさん:2007/06/25(月) 16:45:14
えーと、「\Qとか使う必要ないって。つか無意味。」というのは同意です。

けど、 \Q...\E については、ブラケットの中でも効いていると思います。
\t とか \r とか \n とか \x1B とかも使えますけど、それと同等だと思います。

> Because patterns are processed as double quoted strings,
> the following also work:
803デフォルトの名無しさん:2007/06/26(火) 01:53:21
>>802
無意味っていったのは、効く効かないという意味でじゃなくてね。

 s/[\Q!#\$\%&'()+-.=\@[]^_`{}~\E]//gm; 
だと、\$ はそれぞれに対して\Qの効果が反映するから、\\\$になって
ブラケットの中に含まれる文字の中に\ も入るよ。
この\は$のエスケープのためにいれてんだから意味ないんじゃね?
つーことなんだけど。

 [$] はエラーになるけど、[\$] はエラーにならなくて、かつ$は含まれていて
\は含まれない。ということで  >>793 で求めているものはこれでいいんじゃないの?

>perl -e "print qr<[\Q\$\E]>"
(?-xism:[\\\$])
>perl -e "print qr<[\$]>"
(?-xism:[\$])
>perl -e "print qr<[$]>"
Unmatched [ in regex; marked by <-- HERE in m/[ <-- HERE 5.008008/

長くなった。すまん、
804デフォルトの名無しさん:2007/06/26(火) 02:48:20
>>803
ああ、やっと >>801 の言っている意味がわかりました。了解です。

つか、それを私も >>783, >>793 で指摘したつもりだったんですが・・・
まあいいや。
805デフォルトの名無しさん:2007/06/26(火) 05:39:55
エヂタの色分けでエスケープし忘れているかどうかをわかるようにすれば一挙に解決
806デフォルトの名無しさん:2007/06/27(水) 22:56:50
UTF-8完全対応でegrepってまだだっけ?
つか今出せば早期対応なのかな。
807デフォルトの名無しさん:2007/06/28(木) 02:08:56
>>806
どういう意味で完全対応ってのを使っているのかわからんが、
GNU grep はUTF-8でもちゃんと動くぞ。
#grep -E でegrep相当の動作。もっとも egrep という名前でシンボリックリンクが
#作られてたりするけどね。
808デフォルトの名無しさん:2007/06/28(木) 09:59:26
lgrep はダメなんだっけ?
809デフォルトの名無しさん:2007/06/28(木) 19:58:36
lgrepはgrepでそ。
810デフォルトの名無しさん:2007/06/29(金) 22:06:19
>>809
は?
811808:2007/06/30(土) 13:25:22
>>810
egrep ではない (拡張正規表現は扱えない) と言いたかったんじゃないかな。

ハッキリそう言えば良いのに、と思わないでもないが。
812デフォルトの名無しさん:2007/06/30(土) 21:03:19
ある文字列を含まないものにマッチする
正規表現の使い方教えてください。
$str = "sfhipsfpihosf";
#$str = "fdjsdfesfifoo";
print $str =~ /(?:(?!foo).)*/ ;
結果1になってしまいます。
813デフォルトの名無しさん:2007/06/30(土) 22:13:54
:? やめて何にマッチしてるのか見ればいいのに
814デフォルトの名無しさん:2007/07/01(日) 00:44:04
>>812
print $str !~ /(?:(?!foo).)*/ ;
815デフォルトの名無しさん:2007/07/01(日) 14:29:22
「aという文字とbという文字とに挟まれた2桁の数字」
にマッチする正規表現が分からないので教えて下さい。aとbは含みません。
よろしくお願いします
816815:2007/07/01(日) 14:30:23
ID出しておきます
817デフォルトの名無しさん:2007/07/01(日) 14:32:22
いいえ、出ません。
818デフォルトの名無しさん:2007/07/01(日) 14:33:22
/(?:a[0-9][0-9]b|b[0-9][0-9]a)/
819デフォルトの名無しさん:2007/07/01(日) 14:34:23
(?<=a)[1-9][0-9](?=b)
820815:2007/07/01(日) 14:51:01
>>817
出ませんね;;;

>>818
aとbも含まれてしまいました……

>>819
情報の後出しになってしまって申し訳ないのですが、
JavaScriptで使いたいのですが正規表現のエラーが出ました
821815:2007/07/01(日) 14:55:15
すみません、正規表現に頼らず出来そうなのでそちらでやります。
ありがとうございました
822デフォルトの名無しさん:2007/07/01(日) 14:55:47
記憶によればJavaScriptは戻り読みが出来ない
823デフォルトの名無しさん:2007/07/01(日) 16:44:40
>821
WScript.echo('fklsja89bfdlkj'.match(/a([0-9][0-9])b/)[1]);//必ずある場合
WScript.echo(('fklsja8df9bfdlkj'.match(/a([0-9][0-9])b/))?RegExp.$1:'null');//有るかどうかわからない場合
824デフォルトの名無しさん:2007/07/01(日) 21:48:14
(?:[ab])(\d\d)(?:[ab])
825デフォルトの名無しさん:2007/07/02(月) 00:27:37
明らかに角括弧余分だろ
826デフォルトの名無しさん:2007/07/02(月) 02:38:28
>>825
「aという文字とbという文字とに挟まれた2桁の数字」
という質問に対しては、
anna
annb
bnna
bnnb
という組み合わせが考えられる
827デフォルトの名無しさん:2007/07/02(月) 03:13:02
annb
bnna
どっちかだろ
まあ既に解決したみたいだが
828デフォルトの名無しさん:2007/07/03(火) 17:10:05
>>826
annaはbという文字にはさまれてないだろ。
829デフォルトの名無しさん:2007/07/03(火) 19:51:55
サクラエディタって(?<=)
これないの?
830デフォルトの名無しさん:2007/07/03(火) 20:32:36
正規表現で二つ以上の改行をひとつでまとめる処理をしたいのですが、
どのように記述すればよろしいでしょうか?
[\r\n]+ を \r\n で置換しようとしたところ、例えば三つ以上ある改行が
三つの改行に変換されるだけで変化が起こりません。
831デフォルトの名無しさん:2007/07/03(火) 22:48:39
>>830
それで、使用している処理系も試したコードも晒さないのには何か理由でもあるのかね?
832デフォルトの名無しさん:2007/07/04(水) 02:00:04
>>829
戻り読みか。
鬼車を使っているバージョンなら使えるはずだが、そうでなければ使えない。
833デフォルトの名無しさん:2007/07/04(水) 02:05:28
Bregexp.dllでサクラエディタですが、

否定の先読みで改行のみの行も同時に省きたいとき、
^(?!abc.+)\r\n
ではだめで、
^((?!abc).+)\r\n
ならおkでした。なんで?

834デフォルトの名無しさん:2007/07/04(水) 02:55:56
>>833
すまんが「改行のみの行『も』」というなら、どういう行をマッチさせたかったのか
書いてはくれまいか?
835830:2007/07/04(水) 21:13:35
サクラエディタで、使ってる処理系はWindows・・・です(この回答で合ってるかは不明)
------ a.txt -------



a

b



c
------------------

このようなファイルがあった時、改行が無駄なので
------------------
a

b

c
------------------

といった風に置換させたいのです。
試したやり方は置換前の文字列で [\r\n]+ 置換後の文字列で \r\n
です。すみません、わかりにくかったらスルーしてください。
836デフォルトの名無しさん:2007/07/04(水) 21:49:53
サクラエディタは複数行にわたる置換はできなかったはず。
837831:2007/07/04(水) 22:12:29
>>835
いや、その回答でおけ。

で、サクラエディタをインスコして試してみたけど、 >>836 の言うとおりみたい。
たとえば、 >>835 の例のテキスト (10行ある) で [\r\n]+ を「すべて置換」してみると、
「10箇所を置換しました。」って出るので、改行は一行ごとにしか処理できないっぽい。
838デフォルトの名無しさん:2007/07/04(水) 22:25:16
手作業でやるんだったら、

[\r\n]+ ⇒ ##@@## に変換
##@@##+ ⇒ \r\n に変換

でいけるべ。
839835:2007/07/04(水) 22:46:55
>>836-838
ありがとうございました。>>838様のレスでどうやら解決できたようです。
>>837様におきましては、インストールしてまで試して頂いきお手間をかけて
しまって何だか申し訳ないです。しかしともあれありがとうございました(*´Д`)
840833:2007/07/04(水) 23:12:44
>>834
行頭がabcで始まらない全ての行全体。

自己レスだけど、内側の()は否定の先読み指定文字列で、外側はキャプチャ範囲かな
841834:2007/07/05(木) 02:21:41
>>840
ああ、そういうことね。

^(?!abc.+)\r\n 
こっちだと、先読みに .+ を含めちゃっているので実際にマッチした文字列には反映されないでしょ。

^((?!abc).+)\r\n 
こっちは先読みの外に .+ があるから、マッチには行頭から \r\nまでの内容がすべて含まれる。
先読みはマッチそのものの結果を得るだけでマッチした部分はどこにも残らないから。
842デフォルトの名無しさん:2007/07/05(木) 12:47:19
phpで投稿された文字列が半角+改行コードのみかどうか調べたいのですが

if(preg_match"/" ^[^a-zA-Z0-9]*$ "/"){全角も入ってるよ;}

こんな感じでいいのでしょうか?
この場合改行文字の扱いがされなさそうですが・・・
843デフォルトの名無しさん:2007/07/05(木) 13:16:38
/[^[:print:]\r\n]/ とか
844デフォルトの名無しさん:2007/07/05(木) 13:32:25
「:」も半角だけど
845デフォルトの名無しさん:2007/07/05(木) 17:46:01
半角だけど、何?
846デフォルトの名無しさん:2007/07/07(土) 03:48:32
鬼車をソフトに組み込もうと思ってるのですが
改行コードの\r\nを\nひとつみたいに振る舞えさせることってできますかね?
たとえば
.は\rにマッチしてしまいますがマッチしないように
\nは\nだけにマッチしますが\r\nにマッチするように
\sは\rと\n1個ずつマッチしていきますがいっきに\r\nにマッチするようにって感じです。
847デフォルトの名無しさん:2007/07/07(土) 04:27:45
>振る舞えさせる
振る舞え……
848デフォルトの名無しさん:2007/07/07(土) 08:09:13
>>846
USE_CRNL_AS_LINE_TERMINATOR
849846:2007/07/07(土) 15:01:31
>>847
振る舞わせるか
>>848
どうもありがとうございます、でも
USE_CRNL_AS_LINE_TERMINATORを有効にしてコンパイルしてみましたが
求めていたのとはちと違うみたいです。
850デフォルトの名無しさん:2007/07/07(土) 17:40:14
どう違うんだろうと思ったが、USE_CRNL_AS_LINE_TERMINATORは
$の挙動が変わるだけだっけ?
851デフォルトの名無しさん:2007/07/09(月) 01:01:06
気軽に「こんなソフトありませんか?」スレから誘導されて来ました。
現在使用しているソフトはこちらのRepl-Aceというものです。
ttp://www.sirmiles.com/software/repl_ace.htm

(1)「AあBいAうえBおあAいうえBおあいAうえおあBいうえお」
(2)「A亜BイA宇江BオアA井宇江BオアイA宇江尾亜Bイウエオ」

A以降 あいうえお→亜井宇江尾
B以降 あいうえお→アイウエオ

正規表現というと今まで改行や空白の処理にしか使っていなかったのですが、
上記のような文字列に関して、(1)から(2)に変換する処理を行おうとするに当たり、
こういった特定の文字を境に別々の変換をするのも正規表現を使うことで可能であるとお聞きして、
>>1の二番目のサイトの“タグの外側だけ対象に置換する”で<>をABと考えるのが近いかと思ったのですが、
そのまま貼り付けても処理に失敗し、下のサポートする正規表現の一覧に載ってない記号が多く、
ttp://www.sirmiles.com/software/repl_ace/contents/regexp.htm
自分ではもはや何をどう変えたらいいやらお手上げですので、どなたかご指南ください。
852デフォルトの名無しさん:2007/07/09(月) 02:22:17
そりゃ一対一の文字ごとの置き換えでないかい?
正規表現でどうこうって話じゃないと思うが。

一部の言語でできる、置換部に関数を置くこととができるならそりゃまあ
書けなくもないだろうけど、そういうのはサポートしてないんでしょ? これ。
853デフォルトの名無しさん:2007/07/09(月) 11:22:12
ttp://www.uploda.org/uporg896130.zip.html

851の(1)から(2)へ変換するスクリプト
適当に改造して使え
854デフォルトの名無しさん:2007/07/09(月) 23:39:54
>>852
当該スレを紹介されるにいたった経緯など、詳細はこちらをご参照ください。
http://pc11.2ch.net/test/read.cgi/software/1183546269/200-
回答者の方が今のソフトでも正規表現で出来るとおっしゃいまして、自分なりに考えたのが、

A以降でBより前のあ→亜
A以降でBより前のい→井



B以降でAより前のお→オ

というように一つ一つ指定していく上で、“X以降でYより前”の部分を正規表現で
示せるのではないかというものなのですが、やはり不可能なのでしょうか。
置換部に関数を置くとの意味がどういうことなのか分からず、試しようがないので、
サポート外か、ヘルプに記述がないだけで使えるのかは判断がつきかねます。


>>853
これは素晴らしいです。事前のファイル名とパスの指定が多少面倒とはいえ、
100KBほどの大きなドキュメントの置換も問題なく、動作は申し分ありません。
正規表現とは違った形になりましたが解決しそうです。まことにありがとうございました。
855デフォルトの名無しさん:2007/07/09(月) 23:52:38
>>854
直感的には、めんどい手順を何度も踏めば
正規表現置換でできると思われる

けど、やっぱり正規表現向きじゃないね。
回答者の人が君の質問を誤解してるか、
或いは正規表現の機能を誤解してるんだと思う。
856デフォルトの名無しさん:2007/07/09(月) 23:57:17
>>854
(A[^Bあ]*)あ([^B\n]*[B|\n]) -> \1亜\2
こういうのを全文字分用意すればいけそうな気がするが、
めんどくさいからスクリプト使え。
855に同意。
857デフォルトの名無しさん:2007/07/11(水) 02:04:22
>>855-856
面倒と言ってもその程度によりけりで、いったん定義ファイルを組んでしまえば、
後は次々放り込むだけで済むなら、最初に全文字分用意するくらい苦でもないのですが、

(1)「AあBあAああBああAあああBあああAああああBああああ」
(2)「A亜BアA亜亜BアアA亜亜亜BアアアA亜亜亜亜Bアアアア」

(A[^B]*)あ([^B]*B)→$1亜$2 では、それぞれAからBの間の後の一文字のみが変換され、
(A[^Bあ]*)あ([^B]*B)→$1亜$2 ですと、それが前の一文字のみになり、
(A[^Bあ]*)あ([^Bあ]*)あ([^B]*B)→$1亜$2亜$3 とすると、半端に前から二文字目までの上、
AからBまでにマッチする文字が二つに満たないグループがスキップされてしまいます。
置換箇所が0になるまで繰り返せばいいと言われればそれまでですけれども、
どうにかAからBまでの間の複数の置換を特定する方法はないものかだけが心残りです。
858デフォルトの名無しさん:2007/07/11(水) 13:59:10
適材適所って言葉知らんのか。
明らかに正規表現にやらせる仕事じゃないだろ。
859デフォルトの名無しさん:2007/07/11(水) 20:30:14
>>857
マクロ組め
860デフォルトの名無しさん:2007/07/11(水) 21:40:50
っつうかそこまでわかってるなら、
いい加減それがエディタの制約だってことに気づけ。

つまり、複数の置換を同時に行う機能が無いんだよ。
861デフォルトの名無しさん:2007/07/11(水) 21:48:32
スレ違いだったら誘導願います。

IPアドレスレンジを指定して正規表現を生成してくれるような汎用ツールは
ありませんでしょうか?

Web限定だとグーグル先生が公開してますが、このような物をローカルで
CUIで使いたいのです。

ttps://adwords.google.co.jp/support/bin/answer.py?answer=50012&topic=8157

用途は6000行程あるIPアドレスのレンジを置換等を駆使して手動で
正規表現を作成してたのですが、大分辛くなってきたので・・・
862デフォルトの名無しさん:2007/07/11(水) 21:56:53
>>861
正規表現でやるこっちゃ無い。
ビットマスクでやったほうが圧倒的に速いし簡単。
863デフォルトの名無しさん:2007/07/11(水) 21:59:37
>>862
詳しく教えてもらえませんか?

864デフォルトの名無しさん:2007/07/11(水) 22:11:47
ビットマスクじゃ範囲とってこれないだろ
865861:2007/07/11(水) 22:23:13
要件は>>861の通りなのですが、経緯も説明させてもらいます。

イントラのあるサーバにアクセスしてきた端末が固定かDHCPで割り
振られているかを判断する必要があり、DHCPサーバのconfigから
range設定を拾い、正規表現を作成 ⇒ grepをかける、
というような感じです。

range設定はビットやマスクではなく、

10.192.17.3 〜 10.192.18.20

のような正規表現を作成しようとしている側からすると凶悪な
設定がされてます。

自分はVBSとシェルスクリプト(awk、sed含む)がちょっとだけできる
ので、自分で正規表現ジェネレータを作成しようとしましたが、
まず設計の段階であまりの複雑さに頭がパンクしました。
866デフォルトの名無しさん:2007/07/11(水) 22:27:57
だったら尚単純だろ。

IPアドレスは4byteの符号無し整数値に変換できるから大小比較すればそれで終わり。
867デフォルトの名無しさん:2007/07/11(水) 22:34:28
っつうか仕事なら人に頼むな
868861:2007/07/11(水) 23:12:15
>>866
>IPアドレスは4byteの符号無し整数値に変換できるから大小比較すればそれで終わり。

それって、上で挙げたような"range設定を拾い、grepをかける"という事はできませんよね?
そういったプログラムを組め、と仰りたいのだと思いますが自分にはそこまでのスキルはありません。

アドレスレンジを正規表現にできれば汎用で使えると思い、時間をかけて調べていたのですが、
そういったツールは見つからず、またここで聞いてもわからない、という事であれば、存在
しないのだと思います。

レスしてくれた方ありがとうございました。

869デフォルトの名無しさん:2007/07/11(水) 23:57:05
>>868
つくってくださいスレに依頼すれば。
いや、仕事なら自分でやったほうが本人のためか。
870デフォルトの名無しさん:2007/07/12(木) 01:15:22
>868
その、グーグルのページのソースを見れば?、スクリプトで書いてあるじゃん。
871デフォルトの名無しさん:2007/07/12(木) 01:56:21
>>868

>>870の言うとおり、要件を満たすだけなら、
スクリプトで書いてあるのでそれを使えばよい。

だけど、正規表現にすると、さっきのアドレスレンジが
^10\.192\.(17\.([3-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))|((1[7-8])\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5])))|18\.([0-9]|1[0-9]|20))$
こんな文字列に置換されてしまう。

これでは何か起きたときの保守性が悪すぎる。

どうせスクリプトか何かを使うんでしょ?
設定ファイルに
10.192.17.3 - 10.192.18.20
とか書けばそれで動くように仕組みを作るべきだね。
872デフォルトの名無しさん:2007/07/12(木) 02:14:39
(10.192.17.3|10.192.17.4|10.192.17.4| 略 | 10.192.18.20)
みたいな正規表現を生成するのはOKなわけ?
873デフォルトの名無しさん:2007/07/12(木) 02:15:17
ソース見てて疑問に思ったからちょっと動かしてみた。
これちゃんと動いてなくね?w

192.168.1.1〜192.168.2.9の範囲で出てきた

^192\.168\.(1\.([1-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))|(([1-2])\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5])))|2\.([0-9]))$

を使って、EmEditorで検索すると、192.168.2.20が引っかかるんだが。
874デフォルトの名無しさん:2007/07/12(木) 03:19:29
とりあえず、一桁でやってみた。
49 235を引数で食わせたら、
((49)|([5-9][0-9])|(1[0-9][0-9])|(2[0-2][0-9])|(23[0-5]))
こういう出力が出せるようなのはできた
875870:2007/07/12(木) 03:22:28
|(([1-2])\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5])))
これが、余計だね。
確認もしないで、薦めてしまってすまん。
876デフォルトの名無しさん:2007/07/12(木) 12:32:27
質問です。
小数点の書式が#0.###で
現在はこのようにしています。
^[0-9]{1,2}[[\\.][0-9]{0,1}[0-9]{0,2}]?$
これだと1や11のように二桁の数字も弾いてしまいます
二桁以内.三桁以内にするにはどうすればいいでしょうか?
また、01も弾きたいです
よろしくお願いします
877デフォルトの名無しさん:2007/07/12(木) 12:36:58
>>876
それはどこの方言ですか
878デフォルトの名無しさん:2007/07/12(木) 12:53:38
>>877
すいません忘れてました
XMLとJSPです
879デフォルトの名無しさん:2007/07/12(木) 13:24:31
解決しました
ただ、01のはじき方がわかりません
880デフォルトの名無しさん:2007/07/12(木) 13:38:07
[1-9]?[0-9]
881デフォルトの名無しさん:2007/07/12(木) 15:03:42
>>880
おおお、先頭に&で追加したら出来ました
ありがとうございました!
882デフォルトの名無しさん:2007/07/12(木) 15:25:42
00 → 0
010 → 10
00・・・002301 → 2301

というように、数字の頭にある0を削るのはどうすればいいでしょうか?
883デフォルトの名無しさん:2007/07/12(木) 15:29:49
s/^0+//;
884デフォルトの名無しさん:2007/07/12(木) 15:47:14
>>883
それだと、

00 → ""

にならないですか?
885デフォルトの名無しさん:2007/07/12(木) 15:49:56
s/^0+([1-9]|0$)/\1/;
886デフォルトの名無しさん:2007/07/12(木) 16:09:51
>>885
それだと、010系がうまくいかないような。
887デフォルトの名無しさん:2007/07/12(木) 16:20:00
マジで?
888デフォルトの名無しさん:2007/07/12(木) 16:20:49
s/^0+([0-9])/\1/;
889デフォルトの名無しさん:2007/07/12(木) 16:28:31
>>888
やっぱり、010系が。。。
890デフォルトの名無しさん:2007/07/12(木) 16:32:40
use strict;
$_ = "010";
s/^0+([1-9]|0$)/\1/;
print; # 10

$_ = "010";
s/^0+([0-9])/\1/;
print; # 10
891デフォルトの名無しさん:2007/07/12(木) 16:34:40
!?( ゚Д゚)
892デフォルトの名無しさん:2007/07/12(木) 17:20:02
>>890
あれ?
Rubyでやっているのですが、こうなりました。。。

a = "010";
/^0+([1-9]|0$)/ =~ a;
puts $1; # 1

a = "010";
/^0+([0-9])/ =~ a;
puts $1; # 1
893デフォルトの名無しさん:2007/07/12(木) 17:29:37
それは一番目のキャプチャを表示してるだけじゃん。置換しろよ。
894デフォルトの名無しさん:2007/07/12(木) 17:31:27
>>893
了解しました。
置換するメソッドを探してみます。
895デフォルトの名無しさん:2007/07/12(木) 18:39:22
(´・ω・`)
896デフォルトの名無しさん:2007/07/12(木) 20:39:59
CHIKANCHIKAN - 痴漢メソッド

ある一定の値(15から25)を持ち、かつメス属性を持った実体を過激に痴漢するメソッドです!!!!
897デフォルトの名無しさん:2007/07/12(木) 21:44:03
つまんねえこと書くなオッサン
898デフォルトの名無しさん:2007/07/12(木) 21:58:04

(?:0+?)([1-9][0-9]*) → \1

じゃだめなん?
899デフォルトの名無しさん:2007/07/12(木) 22:03:33
ミスった

^(?:0+)([1-9]+[0-9]*|0)

これでどうだろう
900デフォルトの名無しさん:2007/07/12(木) 22:04:30
つかこれでいいのか

^0+([1-9]+[0-9]*|0)
901デフォルトの名無しさん:2007/07/12(木) 23:01:59
>>872=874?
わざわざ試作までして頂いたようで申し訳ありません。

>>869-875
質問の趣旨は、要件にあった物ががあれば、ちょっと教えてもらえないか、
という事であって、プログラムを書いて欲しいとまでは思ってませんでした。
自分はスキルが低いので何もお返しができませんし(汗)

今後は、似たような悩みがありそうなサーバ系のスレででも、別のアプローチで
質問してみます。

レスして頂いた方々、ありがとうございました。
902861=868=901:2007/07/12(木) 23:26:44
すみません自分のレス番つけてなかったです。
903デフォルトの名無しさん:2007/07/13(金) 08:35:24
>>900
gsubという置換メソッドを見つけましたが、その方法だと>>892のやり方でも
いけました。
どもです。
904デフォルトの名無しさん:2007/07/13(金) 19:08:46
AAAAAA/BCD→AAAAAA
BGD/HJL→BGD
/より後ろの文字列を置換で削除(/も含む)したいのですがどういう表記にすればいいんでしょうか?
905デフォルトの名無しさん:2007/07/13(金) 19:32:02
>>904

(.*?)/.* を \1 に置換

処理系によっては / は \/ にエスケープ。
906デフォルトの名無しさん:2007/07/13(金) 19:46:58
>>905
即レスありがとうございます、置換できました
907デフォルトの名無しさん:2007/07/13(金) 20:28:46
/.*を空文字置換ではいかんの?
908デフォルトの名無しさん:2007/07/13(金) 21:27:50
普通はそうなる罠
909デフォルトの名無しさん:2007/07/14(土) 21:38:25
>>901
作った。
自分のブログに上げたから、ブログ検索で見つけてくれ。
910デフォルトの名無しさん:2007/07/15(日) 00:12:39
質問です
「切れる」「切れた」「切れす」「切れてん」「切れ、」にヒットして「切れ〜レス」にヒットしないような正規表現を作ろうと思い、

(?=.*切れ)((?=.*る)|(?=.*た)|(?=.*す)|(?=.*てん)|(?=.*、))^(?!.*レス).*

というのを作ったのですが、これだと「切れ〜〜、」というものまでヒットしてしまって困っています。
「切れ〜〜、」にヒットせずに、「切れ、」にヒットするようにはどうすれば良いのでしょうか?
よろしくお願いします。
911デフォルトの名無しさん:2007/07/15(日) 00:40:48
lex的にやればできる。awkでもできそうだが。

"切れ([るたす、]|てん)" { printf("hit"); }
"切れ.*レス" { /* ignore */ }
. { /* ignore */ }
912デフォルトの名無しさん:2007/07/15(日) 01:11:22
なんでlex?
普通に

切れ(る|た|す|(てん)|、)

でいいだろ。
913デフォルトの名無しさん:2007/07/15(日) 01:13:42
切れ([るたす、]|(てん))
のほうがいいか。
914デフォルトの名無しさん:2007/07/15(日) 01:16:52
>>912

それだと 「切れるレス」 が問題になる
915デフォルトの名無しさん:2007/07/15(日) 02:03:08
「切れ〜レス」だけは駄目ってこと?

「切れるレ」とかは?
916デフォルトの名無しさん:2007/07/15(日) 02:50:06
自分のWindowsアプリに正規表現を組み込もうと思っていますが、どの既存のエンジンが
みなさんのお勧めでしょうか??安定して、日本語を正しく処理できるエンジンがいいです。
917・∀・)っ-○◎●:2007/07/15(日) 03:12:06
よく見るのはBREGEXP.DLL
最近は鬼車じゃないの。

あとはライセンスじゃね?
GPLな正規表現ライブラリ薦められて何も知らずに採用しちゃって・・・
なんてことがあっても誰も責任はとれんよ。
918デフォルトの名無しさん:2007/07/15(日) 03:13:52
>>916
文字コードは?Unicode, Shift_JIS?
919・∀・)っ-○◎●:2007/07/15(日) 03:20:30
Boostの文字列操作ライブラリはshift-jisと相性良くないからな。
自分でトークンイテレータを作りこむ人にはアリな選択
920デフォルトの名無しさん:2007/07/15(日) 03:25:31
文字コードはUnicodeでお願いします。Windowsの内部形式と同じUTF-16LEで。
BREGEXPか鬼車ですか。わかりました。調べてみます。
921デフォルトの名無しさん:2007/07/15(日) 03:39:48
Unicodeなら、Bregexp.dllは使えないな。鬼車かBoostかな?
鬼車は置換処理は自分で書かないといけないので注意。

あとは、Bregexp互換で中身は鬼車のbregonig.dllってものもあるけど、
ベータ版のUnicode対応版が出てる。置換もあるけど、まー、ベータ版だから様子見かな。
922デフォルトの名無しさん:2007/07/15(日) 06:32:38
>>915
「切れるレス」にヒットしなければいいです。

専ブラJaneのあぼーんで使いたいので、perl互換で作りたいのです。
>>910の正規表現だと、「切れ、」と「切れ〜〜、」のどちらにもヒットしていしまい、この2つを区別したいのです。
例えば「切れないし、」は残したい場合でも、「切れ」と「、」が含まれるのでヒットしてしまうのです。

どうすれば解決できるのでしょうか?よろしくお願いします。
923922:2007/07/15(日) 06:48:52
書き忘れました。
情報小出しにしてすいませんでした。
924デフォルトの名無しさん:2007/07/15(日) 06:55:11
しね
925デフォルトの名無しさん:2007/07/15(日) 13:17:40
UTF-8 なら PCRE でも良くね?
926・∀・)っ-○◎●:2007/07/15(日) 13:54:29
単純な文字列マッチの性能は鬼車>PCRE

文字列固定の部分をBoyer-Moore法使って高速化してるからな。
Xpressiveもそうだっけな
927デフォルトの名無しさん:2007/07/15(日) 14:23:29
>>922
手元に環境無いから試せないが

/切れ([るたす、]|(てん))(?!レス)/

では、どうか?
928デフォルトの名無しさん:2007/07/15(日) 19:49:29
>>927
だめでした。
「切れ、」と「切れ〜〜、」は解決できているのですが、「切れるレス」にもヒットしてしまいました。
929デフォルトの名無しさん:2007/07/15(日) 20:11:02
正規表現はxxを含まないというのを書くのに向いてないのに
なぜ無謀にもやろうとする奴が後をたたないのだろうか...
930デフォルトの名無しさん:2007/07/15(日) 20:18:39
NOT ○○を含む
で実現すればいいのにねぇ
931デフォルトの名無しさん:2007/07/15(日) 21:00:59
そうは言っても、ソフトがそれに対応していないとどうにもならんわけで。
(Janeはどうか知らんが)
932デフォルトの名無しさん:2007/07/15(日) 22:44:49
>>928
そもそも Jane の正規表現って、Perl 互換なの?
あと、日本語をちゃんとサポートしてるのか?

Jane で使える正規表現を説明しているページ Plz
933デフォルトの名無しさん:2007/07/15(日) 23:38:25
素朴な疑問だけど、正規表現に否定がないのはなぜ?

!(正規表現) で(正規表現)にまっちしない文字列、みたいのが
あってもよさそうなものじゃないかと思うのですが
934デフォルトの名無しさん:2007/07/15(日) 23:54:22
>>932
JaneView.txtに
▼01101-040210RC1
▽正規検索ユニットを変更
 ・これまで使っていたRegExpRから、Windows/IE付属のRegExpオブジェクトに変更
 ・文法はPerl5互換(これまでと同じ)
 ・パフォーマンスは純粋な検索部分の速度で約2〜3倍に向上
 ・以前のユニットに戻すには、「設定」「設定」「その他」の「正規検索にWSHを使う」
  をオフにして再起動
 ・環境の問題でWSHが使えない場合は、初回起動時に警告ダイアログが出て自動でオフに
  設定されます(その場合、チェックボックスはグレーアウトされる)
  ※WSHで問題の報告がなければ、いずれRegExpRを取り除く予定です。
とありました。
日本語は使えてます。
935デフォルトの名無しさん:2007/07/16(月) 00:01:42
>>933
まいっちんぐしない文字列を痴漢するときはどうするんだい?
936デフォルトの名無しさん:2007/07/16(月) 00:18:35
というか、1文字の入力から状態遷移を繰り返してるから
入力から遷移先が決まらないものはダメなんじゃねえの
937デフォルトの名無しさん:2007/07/16(月) 00:38:03
[^hoge]
938デフォルトの名無しさん:2007/07/16(月) 00:38:19
正規言語の補集合も正規言語だから、!(正規表現)みたいのが
なくても書けるので不要ということだろうな。でも与えられた
正規表現が受理する言語の補集合を受理する正規表現を書くのは
大変なので、そういうシンタックスシュガーがあれば便利かも?


939デフォルトの名無しさん:2007/07/16(月) 00:47:15
grep -v 'regexp'
940デフォルトの名無しさん:2007/07/16(月) 00:52:00
>>938
意味がわかりません。
941デフォルトの名無しさん:2007/07/16(月) 00:58:26
>>940
自分の無知を偉そうに自慢されても私たちに出来る事は何も有りません
942デフォルトの名無しさん:2007/07/16(月) 01:03:39
>>934
確かに

> ・文法はPerl5互換(これまでと同じ)

って書いてあるけど

> Windows/IE付属のRegExpオブジェクトに変更
> ・環境の問題でWSHが使えない場合は

とも書いてあるので、細かいところまで Perl 互換かはちょっと怪しいな。

とりあえず
http://tehen.hp.infoseek.co.jp/abone/abone.html
によると、

/切れ([るたす、]|(てん))[^レ][^ス]/

あたりは動きそう。

(行末とかが "切れる" とかなってるとちょっと不味いかも...。)
943デフォルトの名無しさん:2007/07/16(月) 01:10:31
>>941
小難しい単語並べりゃいいってもんじゃないんだよ。

>正規言語の補集合も正規言語だから、!(正規表現)みたいのが
>なくても書けるので不要ということだろうな。

書いてみろ。

この作業が酷く大変なら、そういうシンタクスシュガーが無い理由もわかるだろ。
944デフォルトの名無しさん:2007/07/16(月) 01:29:25
なんちゅう詭弁
945デフォルトの名無しさん:2007/07/16(月) 01:29:33
>>943
特定文字列が含まれてるかどうか調べるなら
if( $pero =~ /kari/ ){print "バーロー\n";}

含まれていないことを調べるならその補集合で
if( !($pero =~ /kari/) ){print "ローバー\n";}

ってことを言っただけでしょ?
これだけじゃ超えられない表現もいっぱあるけどさ
946・∀・)っ-○◎●:2007/07/16(月) 03:13:12
クイックハックでパターンの先頭に1個「!」があれば否定にするようにしたことあったな。
実現方法は後察しの通り。
947デフォルトの名無しさん:2007/07/16(月) 06:55:18
if( $pero !~ /kari/ ){print "バーロー\n";}
948デフォルトの名無しさん:2007/07/16(月) 07:19:42
団子って何歳?
949デフォルトの名無しさん:2007/07/16(月) 09:26:50
たしか40代だったな
950・∀・)っ-○◎●:2007/07/16(月) 15:21:25
永遠の12歳だお
951デフォルトの名無しさん:2007/07/16(月) 22:51:37
36進法で。
952糾 ◆OlivettiFg :2007/07/17(火) 23:14:00
>>950
人間のトシに換算すると(ry
953・∀・)っ-○◎●:2007/07/17(火) 23:22:46
縦読み厨うざい
954デフォルトの名無しさん:2007/07/19(木) 00:36:58
print "バーロー\n" unless( $pero =~ /kari/ );
955デフォルトの名無しさん:2007/07/25(水) 17:23:43
ここに書き込むのは気が引けるほどの、ど初心者なのですが質問させてください。

FirefoxのSearchBox Syncというアドオンを使っています。
これは検索した文字列を検索ボックスに自動的に挿入させるアドオンです。

これで適用させるサイトを増やしたくて、正規表現を見始めました。
そこで本題なのですが、

^http://www\.amazon\.com?\.?(\w+)?/.*keywords=([^&]+)

amazon.*keywords=([^&]+)

では、どちらも検索語句を抽出できますが、どちらの記述の方がスマートな記述なのでしょうか?

なお、最後尾のグループに入る文字列が検索ボックスに挿入されます。
956デフォルトの名無しさん:2007/07/25(水) 19:08:55
どちらがスマートかというより、上のほうが厳密で、下のほうは緩やか。
例えば下のだとamazon.co.jpのほうもマッチします。
957デフォルトの名無しさん:2007/07/25(水) 22:10:23
>>956
上のも co.jp にマッチするというかマッチさせたいという話じゃないのかな?
958デフォルトの名無しさん:2007/07/25(水) 23:29:47
YouTubeのIDだけをとりだしてみたいんだけど
できるGUYいる?

このパターンを
http://jp.youtube.com/watch?v=GUUxY6mJ2es
http://youtube.com/watch?v=GUUxY6mJ2es
http://www.youtube.com/watch?v=GUUxY6mJ2es

こんなかんじ
GUUxY6mJ2es
959デフォルトの名無しさん:2007/07/25(水) 23:37:41
できるよ

分かったら後は自力で頑張れ
960デフォルトの名無しさん:2007/07/25(水) 23:39:29
>>959
レスありがとな!
今「サルでもわかる正規表現」ってサイト読んでるぜ!
961デフォルトの名無しさん:2007/07/26(木) 10:52:33
&または行末 というつもりで[&$]と書いてもうまくいかない
962デフォルトの名無しさん:2007/07/26(木) 10:58:14
行末は文字じゃないから
963デフォルトの名無しさん:2007/07/26(木) 11:04:53
>>962
&または行末 という表現はどうかけばいい?
964デフォルトの名無しさん:2007/07/26(木) 12:02:58
(&|$)
965デフォルトの名無しさん:2007/07/26(木) 13:02:34
>>950
次スレはテンプレに「質問する香具師は実装言語・処理系を言え」を加えて立てといて。
よろしく。
966デフォルトの名無しさん:2007/07/26(木) 13:23:00
()が必要なのか・・・無しで書きたいな・・・
967デフォルトの名無しさん:2007/07/26(木) 13:32:33
なんで?
968デフォルトの名無しさん:2007/07/26(木) 13:47:42
いや、なんでもない
?=を使えばいいのを忘れてた
969デフォルトの名無しさん:2007/07/26(木) 22:08:56
そんなに正規表現による検索って需要あるのか??
だとしたら、俺のソフトにも追加してやるか。
970デフォルトの名無しさん:2007/07/26(木) 22:17:44
いや、お前のには要らない。
971デフォルトの名無しさん:2007/07/27(金) 00:28:35
そもそもお前のソフトが要らない
972デフォルトの名無しさん:2007/07/27(金) 00:56:37
お前もいらない
973デフォルトの名無しさん:2007/07/27(金) 09:41:15
俺もいらない
974デフォルトの名無しさん:2007/07/27(金) 09:59:45
俺にはお前が必要
975デフォルトの名無しさん:2007/07/27(金) 12:12:38
いらないのは俺だけ
976デフォルトの名無しさん:2007/07/27(金) 21:17:33
おらだけいらね
とりなしてくだせ
977デフォルトの名無しさん:2007/07/28(土) 14:46:07
文章から特定の単語以外をすべて空文字に置換することはできますか?
978デフォルトの名無しさん:2007/07/28(土) 15:38:23
>>977
できるかもしれないが、まずは >>965 で。
979977:2007/07/28(土) 15:40:46
すいません。

サクラエディターもしくはEclipseのテキストエディターでできれば、と思います。
980デフォルトの名無しさん:2007/07/28(土) 15:40:45
そのへん言わないやつらは全員perl準拠だと思えばいいよ
違う環境だったら死ねと言えば済むこと。
981デフォルトの名無しさん:2007/07/28(土) 17:49:23
>>979
死ね
982デフォルトの名無しさん:2007/07/28(土) 18:22:22
>>979
死ね
983デフォルトの名無しさん:2007/07/29(日) 00:19:13
ヒドスw
まあ、結論だけ言うと出来ないよ。>>977
984デフォルトの名無しさん
サクラエディタマクロでWindowsSriptで否定の先読みが使ってやれ。
空文字ならnul文字だな。\c@だ。