1 名前:正規表現 mailto:正規表現 [02/12/06 18:09] 正規表現
268 名前:名無しさん@お腹いっぱい。 [03/05/30 21:59] 文字列中、丸括弧(全角、半角問わず)で閉じられた部分を取り出す表現を考えているけど、うまくマッチしてくれない。 (丸括弧の中に丸括弧は含まない。Perlの正規表現を使用) $string = '(22(1)'; if($string =~ /[((]([^()()]*)[))]/){ print $1; } else{ print "No match.."; } この場合は"1"がマッチするのを期待しているのだけど、なぜか"22"の部分がマッチした。 OS(UNIX/WinXP)、Perlのバージョン(5.0/5.8)の異なる環境で同じことを確認したけど、結果は変わらず。 さらに、文字コード(Shift-JIS/EUC)の違いでも、結果は変わらなかった。 "1"をマッチさせる別の表現はないですかね? # 全角"("の中にどうも半角")"の文字が隠れてるのかなぁ?(あくまでも推測)
269 名前:名無しさん@お腹いっぱい。 mailto:sage [03/05/30 22:42] >>268 おめな、2byte文字と1byte文字が同じに扱われると思ってるらしいな。たぶん、 文系のドキュソだな。しかも、すぐ上で2byte文字コードの話出てたの見てね えな。こいう、初心者質問は、webprogのPerl初心者スレ逝け。
270 名前:名無しさん@お腹いっぱい。 mailto:sage [03/06/05 14:26] >>268 Perl5.8.0 + UTF8 でやったら 1 になったよ。
271 名前:名無しさん@お腹いっぱい。 mailto:sage [03/06/07 12:10] [ ] のなかに '-' と ']' の両方を入れたい場合はどうすればいいのですか?
272 名前:名無しさん@お腹いっぱい。 mailto:sage [03/06/07 12:20] >>271 何で?
273 名前:名無しさん@お腹いっぱい。 mailto:sage [03/06/07 12:29] >>271 []-]
274 名前:名無しさん@お腹いっぱい。 mailto:sage [03/06/17 23:25] >>271 !.-[
275 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/03 21:13] 保守
276 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/08 11:49] regexp ml盛り上がってますね。読んでて楽しい。
277 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/08 14:02] このスレはいつからまともな人たちをヲチするようになったのですか?
278 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/12 21:26] すいません、テキストファイルの中の .bananaなどの単語(行頭ではなく)の先頭が ドットがあるものだけをgrepで抜き出したいのですが、jp.appleのような単語までひっかかって しまい上手く絞り込めません。 アドバイスをお願いします!!
279 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/12 21:54] >>278 \b?\.\w+? で、どうじゃろ?
280 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/12 22:44] >>279 すいません、なんか上手くいかないです。 ls -laでディレクトリ内の全ファイルを表示して、grepで隠しファイルだけを抽出したかったのですが。
281 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/12 23:34] ls -la | grep ' \.' ではあかんの?
282 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/12 23:57] >>281 行のどこかに"."があれるとヒットしてしまうんです
283 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/13 00:28] ls -la | grep '^\.' こういうこと?
284 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/13 00:28] >>282 とはいえ、"."って、ファイル名にしかでてこないよね? >>281 をよーくみる。
285 名前:283 mailto:sage [03/07/13 00:30] 間違えた。 ls -1a | grep '^\.' これか ls -la | grep ' \.' これだな。下は余計なものを拾う可能性もあるが。
286 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/13 00:31] ls -d .* なんてね。
287 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/13 00:32] あ、正規表現スレだった。すまん。
288 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/13 02:00] ヤハリココハオモッテタトオリバカバッカリダッタナ(プ
289 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/13 02:57] ls -la | awk '$9 ~ /^\./{print $0}' はどうよ。
290 名前:名無しさん@お腹いっぱい。 [03/07/13 11:30] >>280 ふつーそういうときは ls つかわず findつかえ。 find ./ -type f -name "\.*" -print
291 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/13 14:36] (())
292 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/14 11:38] >>290 ふつーそういうときは >> つかわず >> つかえ。
293 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/14 19:04] backreferenceを前方参照と訳したのはなぜですか?
294 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/14 21:19] 後方参照としている訳もあるよ。 まぁ、現在の位置よりも前を参照するという意味では 日本語的には前方参照であってると思う。 ようするに「今いる位置より戻って参照」って意味になるんだから。 んでも、意味を考えて訳すなら「戻って参照」とか、どう?
295 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/14 21:32] >>294 ちょっと前にCスレで話題になったんだけど、Cで「前方参照」といった場合の前方って、 ファイルの終端方向を指す。「ひどい訳語だ」ってことで話は終わったんだけど、 正規表現でも混乱が見られるしなんかいい言葉ないもんかねえ。 日本語では時間を表す文脈で「前」にまるで正反対の意味があるからよくないのだと思う。 「以前」だと過去だし「前進」だと未来だし。 あとこれはすれ違いか? そうだよね。すまん。
296 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/14 21:41] >>279 >>281 >>283 >>284 >>285 >>286 >>287 >>289 >>290 みなさま、ありがとうございます。 シングルクォーテーションに空白が使えたり、 アッパーチルダとハット(キャレット?)の区別を知ったりと、 正規表現の難しさを知りました。 今、「テキストデータ料理学」っていう古い本を読んでいるのですが、 オライリーの正規表現本は買ったほうがいいですか? (もう2〜3週間前にオライリーのサイトでカタログを注文したのに、 まだ来ない…)
297 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/14 22:23] おれは初版も新しいのも持ってるけど、自分の知識に自信がないうちは お薦めしない。もちろんあったらあったで便利だけど。 やっぱり、「俺、正規表現バリバリだぜーYAH」状態で買って読んで 目からうろこ落ちまくり感を堪能するのがいいんではないかと。
298 名前:名無しさん@お腹いっぱい。 [03/07/14 23:31] >294 するってえと、正規表現的には日本語で前方参照あるいは後方参照と書いてあったら どっちもbackreferenceと思えってわけだぁね。 >295 計算機分野だと「前方」という言葉はforwardの訳語というのがあたりめえだと思ってたから、 正規表現関係だと、「前方参照」がbackreferenceのことだっていうのがわかんなくて 難儀したってわけよ。
299 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/14 23:33] >>297 >>296 は学ぶ意欲を持っているから、今のうちに買っておいて損はないと思う。 むしろ薦める。 オイラリーはハズレが少ないからな。
300 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/14 23:35] >>298 俺はperlから入ったから後方参照が当たり前かと思ってた。 他言語使うようになってから吃驚したってわけよ。
301 名前:298 mailto:sage [03/07/14 23:43] perl5の日本語マニュアルで、「前方参照」を "lookahead assertion"の訳語として 使っているやつがあった。 (?=regexp) 長さの無い、前方参照位置指定子。 (?!regexp) 長さの無い、前方参照否定位置指定子。 英語だと (?=pattern) A zero-width positive lookahead assertion. (?!pattern) A zero-width negative lookahead assertion. わけわかんねぇな(w
302 名前:298 mailto:sage [03/07/14 23:48] ありゃりゃ? (?<=pattern) A zero-width positive lookbehind assertion. (?<!pattern) A zero-width negative lookbehind assertion. "lookbehind assertion" の訳語って何だ?
303 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/15 00:32] 「俺の背後に立つな」 デューク東郷の格言だろ。
304 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/15 00:35] lookahead 見越し lookbehind 見返り
305 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/15 01:01] 前後不覚だな。
306 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/15 03:12] >>296 >オライリーの正規表現本は買ったほうがいいですか? 持ってなくても覚えられるし、 エディタのサーチとか grep とかで実験しながら 感覚的に慣れるのも悪くないんじゃない? ただし emacs で覚え始めるのはすすめない。 backslash で混乱する。
307 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/15 07:21] >>297 >>299 >>306 ちょっと大きな本屋に行って立ち読みしてみます。 ありがとうございました〜
308 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん
309 名前:名無しさん@お腹いっぱい。 mailto:age [03/07/17 13:35] >>308 二度と目を覚ますな。
310 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん
311 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/20 21:36] さげ保守
312 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/27 22:01] OOはもうすぐ1.1出るけど、MSWORDよりセキュリティ大丈夫かな? pc2.2ch.net/test/read.cgi/bsoft/1055292975/392
313 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん
314 名前:高校生 [03/08/02 17:12] boo baa baz っていうテキストが例だとして、sedを用いて、 booまたはbaz、っていう正規表現はどうなるの? rubyやperlならパイプ記号で条件和の表現が出るけど、 同じように書いてもsedに誤解されてしまう。
315 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/02 17:52] >>314 ん? \|使えば良いのでは
316 名前:高校生 mailto:sage [03/08/02 18:06] sed 's/boo\|baa/hoge/g' ./hage.txt とかだとやっぱりだめなんすよね。 「boo」とかの単語の括り方がよくわからんのです。
317 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/02 20:53] GNU sed 4.0.7版 ではそれでもできてるけどな。 sed 's/\(boo\|baa\)/hoge/g' これでどう?
318 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/02 22:07] >>317 gsedならできるがsedは食ってくれない。
319 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/03 01:09] 単一の正規表現じゃなきゃいかんの? sedと決まってるなら sed -e 's/boo/hoge/g' -e 's/baa/hoge/g' でいいんちゃう? 置換後の文字列と置換前の文字列の片方とで重なりがある場合 どうするかひとしきりモメたりする ↓↓↓ のがお決まりだな。
320 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/03 09:52] 単一の正規表現でないと記述が冗長で見た目がキモイ、 っていうのはあると思うよ。 おいらはインストール直後のFreeBSDの環境構築をスクリプトに任せたくて、 結局シェルスクリプトにawkな記述を書いて解決した。 カーネルの再構築にしても、/etc/下の記述にしても、要はテキストの置換なわけで。 本当はrubyがFreeBSDの/usr/bin下にあるようなご時世だったら 楽ができるんだけど、そこら辺は個人的な勉強不足だなぁ。
321 名前:名無しさん@お腹いっぱい。 [03/08/13 19:13] {a,b}上の言語Lが 『aaで開始し、かつ、bbを部分列として含む』という条件を満たす語からなるとき Lを表す正規表現ってどうなるの? L=aa(a*b*+bb)* ?
322 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/13 20:45] L=aa(a+b)*bb(a+b)*
323 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/13 22:05] >>321 *+ ???
324 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/13 23:05] >323 '+'より'|'のほうが普通かな。 L=aa(a|b)*bb(a|b)* 本来的には連接、選択、閉包が表現できればいい。
325 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/13 23:08] L ::= aA A ::= aB B ::= aB | bC C ::= aB | bD D ::= ε | aD | bD
326 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/13 23:34] .* 何にでもマッチする最強の正規表現です!
327 名前:名無しさん@お腹いっぱい。 [03/08/13 23:50] >>326 ドットが含まれてなかったらマッチしない罠
328 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/13 23:53] キター
329 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/14 00:13] ageてるし、ネタと見た。
330 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/14 23:29] >>329 しね!
331 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん
332 名前:あぼーん mailto:あぼーん [あぼーん] あぼーん
333 名前:名無しさん@お腹いっぱい。 [03/08/28 20:12] うまづら。
334 名前:名無しさん@お腹いっぱい。 mailto:sage [03/09/02 03:30] ほす。
335 名前:名無しさん@お腹いっぱい。 mailto:sage [03/09/14 04:27] ☆湯
336 名前:名無しさん@お腹いっぱい。 mailto:sage [03/09/16 13:49] [ruby-list:38393] じゃないけど、[a-z] みたいな文字クラスの表現は、 EBCDIC とかだと「意図した通り」には動かないと思うんだけど、 ASCII か ASCII を包含したキャラクタセットという前提で書くべきものなの?
337 名前:名無しさん@お腹いっぱい。 mailto:sage [03/09/16 14:08] >>336 [:lower:] とかは使っちゃだめ?
338 名前:名無しさん@お腹いっぱい。 mailto:sage [03/09/16 15:34] >>337 あ、いや、質問が悪かったですね。 範囲指定する文字クラスはどうあるべき (書くべき) か?っていう話です。 ていうか、 re_format(7) を私の拙い英語力で読んでみたところ、 ASCII コードの並びを前提とするような文字クラスの範囲指定は、 portable じゃないからやらない方が良い、ということのようですね。 というわけで、極力 >>337 さんのみたいな文字クラス指定を使った方が良い、と。
339 名前:名無しさん@お腹いっぱい。 mailto:sage [03/09/20 10:41] ★
340 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/08 15:50] 保守
341 名前:名無しさん@お腹いっぱい。 [03/10/12 16:53] vimで"DEL"という文字列が含む行で、"DEL"以下を削除したい場合はどうしたらいいでしょうか?
342 名前:名無しさん@お腹いっぱい。 mailto:sage :s/DEL.*$/ [03/10/12 17:15] スレ違い。 Vim6 Part6 pc.2ch.net/test/read.cgi/unix/1058706125/
343 名前:名無しさん@お腹いっぱい。 [03/10/13 01:12] :%s/DEL.*//
344 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/13 15:10] >>343 サンクス、すみません。
345 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/18 17:51] ☆
346 名前:名無しさん@お腹いっぱい。 [03/10/21 23:12] >>343 DELは残したい場合はどうすればいいですか?
347 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/21 23:24] :%s/DEL.*/DEL/
348 名前:名無しさん@お腹いっぱい。 [03/11/05 11:20] MS-DOSが使われていた頃に、"mifes"と言うエディターが有った。 そのマニュアルに1頁ほどの正規表現の説明があって、自分は最初に、それで 覚えて使い出した。 使い始めの頃は、何回も間違えたけど、少しづつ慣れてきた。 自分の周りを見ても、プログラマを何年もやっていても正規表現を知らない 人は、結構いる。 一旦、覚えてしまうと非常に便利だと思うんだけど。
349 名前:名無しさん@お腹いっぱい。 [03/11/05 17:48] 正規表現で俺の存在を抹消してくれ。
350 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/05 19:01] s/俺の存在//g;
351 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/05 20:10] gsub!(/俺の存在/, "")
352 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/18 18:31] 捕手
353 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/19 01:38] rー、 」´ ̄`lー) \ T¨L |_/⌒/ `レ ̄`ヽ〈 | i__1 _ゝ_/ ノ L__jイ´_ ) | イ | ノ--、 r'⌒ヽ_ ゝ、___ノ二7 /´ ̄l、_,/}:\ |ーi | l_/ /__ィ::. ゝ~_ィ´:; ,ゝ __〉 { (T´ |1:::. \_>、};;_」 'ー‐┘ ! ` ̄''ァ一 、\ ヽ} ← 保守 〈` ̄ ̄^`¬ノ .::〔 ̄´ 1 ヽ .:::レ ヽ、 |_イー-、_;;j|_:. ゝ、 __,,,... -- |. {―――‐フゝ、 〉 -- ...,,,__ _,, -‐ ´ ,r|__ト, 1ニノ ー'´ ` ‐- ,,_ , ‐ ´ └―'´ `
354 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/19 09:17] >>353 それ捕手じゃなくて投手やっ!www
355 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:24] 別のスレからの引用 ps ax |grep '[s]shd' とやると、grep自身の行にヒットしないそうだけど、なぜ? sってメタ文字でもなんでもないのに。
356 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:30] なぜって言われても、自明だが。
357 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:33] grep sshd と何が違うの?
358 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:35] あ、ごめん、わかった(w
359 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:36] grep sshd だと、ps の出力に含まれる "grep sshd" の "sshd" がマッチする。 grep '[s]shd' だと、ps の出力には "grep [s]shd" が含まれるが、 この "[s]shd" は、[s]shd にはマッチしない。よね?わかる?
360 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 23:59] なるほど。トリックだな。
361 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/05 10:59] まあバッドノウハウだとも思うけどナー www.namazu.org/~satoru/misc/bad-knowhow.html
362 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/05 13:26] そこまでのものではないと思うけど、 この例だと、頭の中でpsの出力まで加工しちゃうからな(w
363 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/05 20:33] grep -v grep でええやん。
364 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 00:05] muttのaliasで alias keyword Name <mailaddress> みたいなフォーマットで並んでいるファイルを alias keyword <mailaddress> # Name に整形しようと思い, cat alias | sed 's![[:space:]]*alias[[:space:]]*\([^[:space:]]*\)[[:space:]]*\(.*\)[[:space:]]*<\(.*\)>!alias \1 <\3> # \2!' > alias.new としました. 上手く行くんですが, "#" の位置が行ごとにバラバラなのが気持ち悪いです. そのファイルで "#" 以前の文字数が一番長いものを調べ, そこに合わせて その他の行の "#" 以降を持ってくるようにするにはどうすればいいんでしょうか?
365 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 00:14] sedでやれってか? 漏れはへたれなので、Perlなどを使ってしまうが(w
366 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 00:28] >>364 2パスでやれば?
367 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 09:20] 2パス?
368 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 16:05] >>367 "#" 以前が一番長いのを調べてから、それに合わせて整形し直せば。