[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 07/10 20:54 / Filesize : 212 KB / Number-of Response : 1014
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

正規表現



1 名前:正規表現 mailto:正規表現 [02/12/06 18:09.net]
正規表現

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かなと思ったのですが、行頭、行末では置換の対象となってくれませんでした。



405 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/31 02:52.net]
>>400
補足です。
ここでいう単語とは \w+ で表せる範囲のもので、
アルファベット大文字、小文字も含めて完全に単語の
先頭から末尾までが一致するものです。


406 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/31 07:45.net]
もっと簡単にできるかもしれないけど、
s/(^|(?<=[^\w"]))note\b|\bnote($|(?=[^\w"]))/book/g;
とかは?

> ただ、"abc note def" これも想定外で構わないのですが

後ろから数えた"の個数が奇数ならマッチしないようにして、
$b =~ s/\bnote\b(?=([^"]*"[^"]*")*[^"]*$)/book/g;
とすれば、"のマッチングが保証できる範囲ではなんとかなるかも。
前からの"の個数でマッチさせようとしたら、
可変長のlook-behindは実装してないらしい。(perl 5.8)


407 名前:名無しさん@お腹いっぱい。 mailto:sage [04/03/31 14:53.net]
s/"note"/hogehoge/g
s/note/book/g
s/hogehoge/"note"/g
おれならこうしちゃうな。
考えんのめんどい。

408 名前:名無しさん@お腹いっぱい。 mailto:sage [04/04/01 01:10.net]
>>402

ありがとうございました。
たいへん勉強になりました。


409 名前:名無しさん@お腹いっぱい。 [04/04/07 15:07.net]
質問させてください。

&にはマッチして欲しいのですが、&にはマッチして欲しくないのです。

どのように記述すればよいのでしょう。

お願いします。



410 名前:405 [04/04/07 15:09.net]
&にはマッチ
&amp;にはマッチしない

でした。すいません。

411 名前:名無しさん@お腹いっぱい。 mailto:sage [04/04/07 15:26.net]
>>405
Perl5 でいい?

412 名前:名無しさん@お腹いっぱい。 mailto:sage [04/04/07 15:32.net]
>>405
/&(?!amp;)/

413 名前:名無しさん@お腹いっぱい。 mailto:sage [04/04/11 13:22.net]
正規表現のおすすめ書って何がありますか?

414 名前:名無しさん@お腹いっぱい。 mailto:sage [04/04/11 14:13.net]
オライリーのやつ。

415 名前:名無しさん@そうだ選挙に行こう [04/07/11 16:49.net]
ワイルドカード(DOS)の *.txt って、正規表現だとどう書くの?

416 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/11 20:35.net]
{(([0-9a-zA-Z]){0,})\.txt}とか半端に返してみるテスト

417 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/11 20:46.net]
[^\\/]+\.[Tt][Xx][Tx]\z とか (ry

418 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/11 22:41.net]
foo と bar 両方含む行をマッチさせたいんだけど、
awkでいうところの and演算子
% awk /foo/&&/bar/
が使える、windowsで動くgrepツールなんか教えてください。

#絞込み再検索のないGUIなgrepツールなんかイラネ

419 名前:名無しさん@お腹いっぱい。 [04/07/11 23:39.net]
>>412,413
. 記号は \ でエスケープになるのですね。.*\.txt でマッチはしました。
助かりました、ありがとうです。



420 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/12 22:46.net]
>>414

FIND "foo" | FIND "bar"

みたいのじゃ駄目?

421 名前:名無しさん@お腹いっぱい。 mailto:sage [04/07/14 00:51.net]
>>414
|が使えるツールなら、/foo.*bar|bar.*foo/とかで近似できるんじゃないの。
CygwinのGNU grepで試してみた。

> cat foobar.txt
foo
bar
foo foo
foo bar
bar bar
bar foo
> grep -n "foo.*bar\|bar.*foo" foobar.txt
4:foo bar
6:bar foo
>






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<212KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef