1 名前:正規表現 mailto:正規表現 [02/12/06 18:09.net] 正規表現
304 名前:298 mailto:sage [03/07/14 23:43.net] perl5の日本語マニュアルで、「前方参照」を "lookahead assertion"の訳語として 使っているやつがあった。 (?=regexp) 長さの無い、前方参照位置指定子。 (?!regexp) 長さの無い、前方参照否定位置指定子。 英語だと (?=pattern) A zero-width positive lookahead assertion. (?!pattern) A zero-width negative lookahead assertion. わけわかんねぇな(w
305 名前:298 mailto:sage [03/07/14 23:48.net] ありゃりゃ? (?<=pattern) A zero-width positive lookbehind assertion. (?<!pattern) A zero-width negative lookbehind assertion. "lookbehind assertion" の訳語って何だ?
306 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/15 00:32.net] 「俺の背後に立つな」 デューク東郷の格言だろ。
307 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/15 00:35.net] lookahead 見越し lookbehind 見返り
308 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/15 01:01.net] 前後不覚だな。
309 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/15 03:12.net] >>296 >オライリーの正規表現本は買ったほうがいいですか? 持ってなくても覚えられるし、 エディタのサーチとか grep とかで実験しながら 感覚的に慣れるのも悪くないんじゃない? ただし emacs で覚え始めるのはすすめない。 backslash で混乱する。
310 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/15 07:21.net] >>297 >>299 >>306 ちょっと大きな本屋に行って立ち読みしてみます。 ありがとうございました〜
311 名前:あぼーん mailto:あぼーん [あぼーん.net] あぼーん
312 名前:名無しさん@お腹いっぱい。 mailto:age [03/07/17 13:35.net] >>308 二度と目を覚ますな。
313 名前:あぼーん mailto:あぼーん [あぼーん.net] あぼーん
314 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/20 21:36.net] さげ保守
315 名前:名無しさん@お腹いっぱい。 mailto:sage [03/07/27 22:01.net] OOはもうすぐ1.1出るけど、MSWORDよりセキュリティ大丈夫かな? pc2.2ch.net/test/read.cgi/bsoft/1055292975/392
316 名前:あぼーん mailto:あぼーん [あぼーん.net] あぼーん
317 名前:高校生 [03/08/02 17:12.net] boo baa baz っていうテキストが例だとして、sedを用いて、 booまたはbaz、っていう正規表現はどうなるの? rubyやperlならパイプ記号で条件和の表現が出るけど、 同じように書いてもsedに誤解されてしまう。
318 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/02 17:52.net] >>314 ん? \|使えば良いのでは
319 名前:高校生 mailto:sage [03/08/02 18:06.net] sed 's/boo\|baa/hoge/g' ./hage.txt とかだとやっぱりだめなんすよね。 「boo」とかの単語の括り方がよくわからんのです。
320 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/02 20:53.net] GNU sed 4.0.7版 ではそれでもできてるけどな。 sed 's/\(boo\|baa\)/hoge/g' これでどう?
321 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/02 22:07.net] >>317 gsedならできるがsedは食ってくれない。
322 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/03 01:09.net] 単一の正規表現じゃなきゃいかんの? sedと決まってるなら sed -e 's/boo/hoge/g' -e 's/baa/hoge/g' でいいんちゃう? 置換後の文字列と置換前の文字列の片方とで重なりがある場合 どうするかひとしきりモメたりする ↓↓↓ のがお決まりだな。
323 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/03 09:52.net] 単一の正規表現でないと記述が冗長で見た目がキモイ、 っていうのはあると思うよ。 おいらはインストール直後のFreeBSDの環境構築をスクリプトに任せたくて、 結局シェルスクリプトにawkな記述を書いて解決した。 カーネルの再構築にしても、/etc/下の記述にしても、要はテキストの置換なわけで。 本当はrubyがFreeBSDの/usr/bin下にあるようなご時世だったら 楽ができるんだけど、そこら辺は個人的な勉強不足だなぁ。
324 名前:名無しさん@お腹いっぱい。 [03/08/13 19:13.net] {a,b}上の言語Lが 『aaで開始し、かつ、bbを部分列として含む』という条件を満たす語からなるとき Lを表す正規表現ってどうなるの? L=aa(a*b*+bb)* ?
325 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/13 20:45.net] L=aa(a+b)*bb(a+b)*
326 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/13 22:05.net] >>321 *+ ???
327 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/13 23:05.net] >323 '+'より'|'のほうが普通かな。 L=aa(a|b)*bb(a|b)* 本来的には連接、選択、閉包が表現できればいい。
328 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/13 23:08.net] L ::= aA A ::= aB B ::= aB | bC C ::= aB | bD D ::= ε | aD | bD
329 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/13 23:34.net] .* 何にでもマッチする最強の正規表現です!
330 名前:名無しさん@お腹いっぱい。 [03/08/13 23:50.net] >>326 ドットが含まれてなかったらマッチしない罠
331 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/13 23:53.net] キター
332 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/14 00:13.net] ageてるし、ネタと見た。
333 名前:名無しさん@お腹いっぱい。 mailto:sage [03/08/14 23:29.net] >>329 しね!
334 名前:あぼーん mailto:あぼーん [あぼーん.net] あぼーん
335 名前:あぼーん mailto:あぼーん [あぼーん.net] あぼーん
336 名前:名無しさん@お腹いっぱい。 [03/08/28 20:12.net] うまづら。
337 名前:名無しさん@お腹いっぱい。 mailto:sage [03/09/02 03:30.net] ほす。
338 名前:名無しさん@お腹いっぱい。 mailto:sage [03/09/14 04:27.net] ☆湯
339 名前:名無しさん@お腹いっぱい。 mailto:sage [03/09/16 13:49.net] [ruby-list:38393] じゃないけど、[a-z] みたいな文字クラスの表現は、 EBCDIC とかだと「意図した通り」には動かないと思うんだけど、 ASCII か ASCII を包含したキャラクタセットという前提で書くべきものなの?
340 名前:名無しさん@お腹いっぱい。 mailto:sage [03/09/16 14:08.net] >>336 [:lower:] とかは使っちゃだめ?
341 名前:名無しさん@お腹いっぱい。 mailto:sage [03/09/16 15:34.net] >>337 あ、いや、質問が悪かったですね。 範囲指定する文字クラスはどうあるべき (書くべき) か?っていう話です。 ていうか、 re_format(7) を私の拙い英語力で読んでみたところ、 ASCII コードの並びを前提とするような文字クラスの範囲指定は、 portable じゃないからやらない方が良い、ということのようですね。 というわけで、極力 >>337 さんのみたいな文字クラス指定を使った方が良い、と。
342 名前:名無しさん@お腹いっぱい。 mailto:sage [03/09/20 10:41.net] ★
343 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/08 15:50.net] 保守
344 名前:名無しさん@お腹いっぱい。 [03/10/12 16:53.net] vimで"DEL"という文字列が含む行で、"DEL"以下を削除したい場合はどうしたらいいでしょうか?
345 名前:名無しさん@お腹いっぱい。 mailto:sage :s/DEL.*$/ [03/10/12 17:15.net] スレ違い。 Vim
346 名前:6 Part6 http://pc.2ch.net/test/read.cgi/unix/1058706125/ [] [ここ壊れてます]
347 名前:名無しさん@お腹いっぱい。 [03/10/13 01:12.net] :%s/DEL.*//
348 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/13 15:10.net] >>343 サンクス、すみません。
349 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/18 17:51.net] ☆
350 名前:名無しさん@お腹いっぱい。 [03/10/21 23:12.net] >>343 DELは残したい場合はどうすればいいですか?
351 名前:名無しさん@お腹いっぱい。 mailto:sage [03/10/21 23:24.net] :%s/DEL.*/DEL/
352 名前:名無しさん@お腹いっぱい。 [03/11/05 11:20.net] MS-DOSが使われていた頃に、"mifes"と言うエディターが有った。 そのマニュアルに1頁ほどの正規表現の説明があって、自分は最初に、それで 覚えて使い出した。 使い始めの頃は、何回も間違えたけど、少しづつ慣れてきた。 自分の周りを見ても、プログラマを何年もやっていても正規表現を知らない 人は、結構いる。 一旦、覚えてしまうと非常に便利だと思うんだけど。
353 名前:名無しさん@お腹いっぱい。 [03/11/05 17:48.net] 正規表現で俺の存在を抹消してくれ。
354 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/05 19:01.net] s/俺の存在//g;
355 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/05 20:10.net] gsub!(/俺の存在/, "")
356 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/18 18:31.net] 捕手
357 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/19 01:38.net] rー、 」´ ̄`lー) \ T¨L |_/⌒/ `レ ̄`ヽ〈 | i__1 _ゝ_/ ノ L__jイ´_ ) | イ | ノ--、 r'⌒ヽ_ ゝ、___ノ二7 /´ ̄l、_,/}:\ |ーi | l_/ /__ィ::. ゝ~_ィ´:; ,ゝ __〉 { (T´ |1:::. \_>、};;_」 'ー‐┘ ! ` ̄''ァ一 、\ ヽ} ← 保守 〈` ̄ ̄^`¬ノ .::〔 ̄´ 1 ヽ .:::レ ヽ、 |_イー-、_;;j|_:. ゝ、 __,,,... -- |. {―――‐フゝ、 〉 -- ...,,,__ _,, -‐ ´ ,r|__ト, 1ニノ ー'´ ` ‐- ,,_ , ‐ ´ └―'´ `
358 名前:名無しさん@お腹いっぱい。 mailto:sage [03/11/19 09:17.net] >>353 それ捕手じゃなくて投手やっ!www
359 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:24.net] 別のスレからの引用 ps ax |grep '[s]shd' とやると、grep自身の行にヒットしないそうだけど、なぜ? sってメタ文字でもなんでもないのに。
360 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:30.net] なぜって言われても、自明だが。
361 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:33.net] grep sshd と何が違うの?
362 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:35.net] あ、ごめん、わかった(w
363 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 19:36.net] grep sshd だと、ps の出力に含まれる "grep sshd" の "sshd" がマッチする。 grep '[s]shd' だと、ps の出力には "grep [s]shd" が含まれるが、 この "[s]shd" は、[s]shd にはマッチしない。よね?わかる?
364 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/04 23:59.net] なるほど。トリックだな。
365 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/05 10:59.net] まあバッドノウハウだとも思うけどナー www.namazu.org/~satoru/misc/bad-knowhow.html
366 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/05 13:26.net] そこまでのものではないと思うけど、 この例だと、頭の中でpsの出力まで加工しちゃうからな(w
367 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/05 20:33.net] grep -v grep でええやん。
368 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 00:05.net] 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 としました. 上手く行くんですが, "#" の位置が行ごとにバラバラなのが気持ち悪いです. そのファイルで "#" 以前の文字数が一番長いものを調べ, そこに合わせて その他の行の "#" 以降を持ってくるようにするにはどうすればいいんでしょうか?
369 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 00:14.net] sedでやれってか? 漏れはへたれなので、Perlなどを使ってしまうが(w
370 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 00:28.net] >>364 2パスでやれば?
371 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 09:20.net] 2パス?
372 名前:名無しさん@お腹いっぱい。 mailto:sage [03/12/30 16:05.net] >>367 "#" 以前が一番長いのを調べてから、それに合わせて整形し直せば。
373 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/11 21:57.net] >>364 70桁でそろえる場合 sed ':a /.\{70\}\#/!bc; b; :c s/\(.*\)\#\(.*\)$/\1 \#\2/; ta' 亀ですが、こんなんでどうでしょう
374 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/11 22:21.net] 決め打ちでいいなら何の苦労もないわけで。
375 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/14 23:40.net] >>369 反則技。gawk で。sed ではどうやっても出来ないような気が……(_ _;) # sed でできるのか? { a=index($0,"#"); if(a>best) { best=a; } c[FNR]=$0 } END { for(i=0;i<=NR;i++){ x=index(c[i],"#"); if(x && x<best) { for (j=x;j<best;j++) { gsub("#"," #",c[i]); } } print c[i] } }
376 名前:名無しさん@お腹いっぱい。 mailto:sage [04/01/15 23:45.net] ( ´∀`)
377 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/03 10:33.net] 保守
378 名前:名無しさん@お腹いっぱい。 [04/02/06 18:23.net] 教えてください。 Windows用のファイルをemacsなんかで開いたとき,最下行に ^Z という符号が表示されることがあります。 これはいったい何でしょうか?
379 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 19:31.net] いわゆるeof
380 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 21:01.net] >>375 ありがとうございます。この符号のあるファイル同士をcatで連結すると,途 中にこの符号が入ってしまいます。この符号をsedでマッチさせて消去したい のですが,どうすればいいでしょうか。 sed '/^$/d' ではダメでした。
381 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/06 21:09.net] >>376 いわゆるeof
382 名前:名無しさん@お腹いっぱい。 [04/02/06 22:38.net] EOF符号をsedで消去できますか?
383 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/21 22:59.net] grep で使える正規表現を精密に解説したサイトはありますかね? 日本語/英語どっちでもいいのですが。
384 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/22 00:19.net] www.kt.rim.or.jp/~kbk/regex/regex.html
385 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/22 00:29.net] レベル低いなー 378に対して出来るとも出来ないとも言えないのか...
386 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/22 00:58.net] 378=381 ですか?
387 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/22 02:14.net] >>378 できるよ。普通に s/^Z// とかすればいい。もちろん^ZはEOFの一文字ね。 こんなの試せばすぐわかるだろと思ってたんだが、よく>>376 を読むと、 「正規表現は純なテキストであるべきで特殊記号を混ぜるのはイクナイ」 と感じたんだろうな。まあ気持ちはわかるわ。 最近の正規表現拡張では、文字をコードの数値で表現する文法が 入ってたりする方が普通(例えばperlとか)だもんな。
388 名前:338 mailto:sage [04/02/22 02:24.net] でね、特殊記号の特別なケースがtab。大昔は\tなんて表現なかったさ。 よく画面上の見た目やハードコピーや雑誌からシェルスクリプトを打ち直して、 tabとspaceの違いで動かないなんてことが時々あったんだよ。 あと勝手にシェルスクリプトを整形されて動かなくなるとか。
389 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/22 02:52.net] >>382 いいえ >>383 ありがトン!
390 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/22 02:55.net] >>382 381=385 が正解
391 名前:名無しさん@お腹いっぱい。 mailto:sage [04/02/22 16:53.net] >>380 ブックマークにいれますた。
392 名前:名無しさん@お腹いっぱい。 [04/03/27 17:05.net] [\\w$'-] これはどういうことなのでしょう? [\w$'-] ならわかるのですが..
393 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/27 17:09.net] >>388 処理系は何?
394 名前:名無しさん@お腹いっぱい。 [04/03/27 17:20.net] >>389 Rubyです Regexp::compile("\b\d[\d\.]+\d\b|[\w]+|[\\w$'-]+") scanメソッドで英文を分割してます
395 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/27 17:22.net] >>390 ほほう。バグってる悪寒。
396 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/27 17:25.net] Regexp::compile("\\b\\d[\\d\\.,]+\\d\\b") こんなのがあるんですが..
397 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/27 18:30.net] >>392 Ruby で "..." の中で '\' を書くときは、'\' でエスケープする必要があるの。 つまり Regexp::compile("\\w") は /\w/ と同じ。 >>390 のだと '\' のエスケープが足りない部分があるように見える。 たとえば、 "\w" は "w" に、 "\b" は "\010" になっちゃう。 ので「バグってる悪寒」と言いました。
398 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/27 18:53.net] >>393 なるほど、必死に\\と重ねる正規表現について調べてましたよ ありがとう
399 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/30 01:42.net] perl で質問です。 NOTE note "note" notes 上のような文字列を「book」だけを「note」に置換したいのですが s/\bnote\b/book/g のようにすると、ダブルクォートで囲まれているものも置換されてしまうのですが それを NOTE book "note" notes のようにするにはどう表記すればよいのでしょうか? 詳しい方、教えてください。
400 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/30 04:15.net] >>395 > NOTE note "note" notes > > 上のような文字列を「book」だけを「note」に置換したいのですが
401 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/30 10:07.net] >>396 その下の s/\bnote\b/book/g ぐらい読んで多目にみてやれ。 >>395 とはいえ、仕様があいまいすぎ。 'note' はどうする? :note: は? "abc note def" は?
402 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/30 10:29.net] s/ note / book /g か? >>397 > とはいえ、仕様があいまいすぎ。 んだな。
403 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/30 12:34.net] >>395 s/(?=[^"])\bnote\b(?=[^"])/book/g; # こんなんで良いわけないよなと思いつつ・・・
404 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/31 02:02.net] >>397 > とはいえ、仕様があいまいすぎ。 すいません、おっしゃるとおりです。 ある単語(note)をある単語(book)に置換したいのですが、 ダブルクォートで囲まれているもの("note")は、その置換からは除外したいのです。 > 'note' はどうする? :note: は? "abc note def" は? したがいまして、これらはとりあえず想定外で構わないので置換してしまっても構いません。 もう少し昨日の例を詳しく書きますと NOTE,note"note"notes-note このようなものでも NOTE,book"note"notes-book のようになってくれるのを期待しています。 ただ、"abc note def" これも想定外で構わないのですが 対応が可能であるのなら、私の勉強の為に教えてくださるとありがたく思います。 >>399 ありがとうございます。 >s/(?=[^"])\bnote\b(?=[^"])/book/g; これを試してみました。 基本的にOKかなと思ったのですが、行頭、行末では置換の対象となってくれませんでした。