正規表現 Part6at TECH
正規表現 Part6 - 暇つぶし2ch331:デフォルトの名無しさん
09/08/19 00:16:07
grepで置き換えとか無理だろ。
Javaなら20行未満で書けるレベルの処理だが。

332:デフォルトの名無しさん
09/08/19 00:35:11
>>331
は? 置換だけならJavaでも10行未満でいけるだろ。
それより20行未満でCSV処理はどうなったのかな?
布団被って泣いてるのかな?w

333:デフォルトの名無しさん
09/08/19 04:12:55
まー落ち着けよ。

Javaなら20行未満で書けるレベルの処理で大人気ないな

334:デフォルトの名無しさん
09/08/19 04:21:09
とりあえず落ち着きませんか?

Javaなら20秒未満で書けるレベルの処理で大人気ないと思いますよ

335:デフォルトの名無しさん
09/08/19 07:14:09
これは落ち着いたほうがいいかもわからんね

Javaなら20%未満のやる気で書けるレベルの処理で大人気ないっていう感想を持つ人もいるだろうし

336:デフォルトの名無しさん
09/08/19 08:05:54
以上、正規表現もJavaも全く解らない人たちが大喜びの映像をお届けいたしました。

337:デフォルトの名無しさん
09/08/19 08:22:25
Javaなら20行未満で書けるレベルの処理で勝利宣言されてもなあ…

338:デフォルトの名無しさん
09/08/19 10:51:23
sedでいいじゃない

339:デフォルトの名無しさん
09/08/19 10:58:45
javaでいいじゃない

340:デフォルトの名無しさん
09/08/20 08:01:32
viで

341:デフォルトの名無しさん
09/08/20 10:41:35
javaで書ける、って言うけど
どうせ javaで正規表現を書くんだろ?

 pattern = Pattern.compile("\\([^\\)]*?(ABC)[^\\)]*?\\)");

みたいな。やたら \ が増えまくって、かえって見にくい。
ディレクトリの区切り文字の \ にマッチさせるのに

 pattern = Pattern.compile("\\\\");

って \ を4回も書かなきゃならん。 \ 地獄だ。武○士だ!

342:デフォルトの名無しさん
09/08/20 12:05:04
Emacs Lisp の正規表現に比べたら別に大したことない。

343:デフォルトの名無しさん
09/08/20 18:33:59
>>341
ん?
\xがエスケープシーケンスになる言語はみんなそうなんじゃないの?

>>342
うむ。


344:デフォルトの名無しさん
09/08/20 19:41:20
>>343
文字列から生成する場合に限ればな
正規表現リテラルが存在する言語ならそれに付き合う必要はない

345:デフォルトの名無しさん
09/08/20 21:01:57
あーそうだった。忘れてた。thx


346:デフォルトの名無しさん
09/08/20 21:19:05
> pattern = Pattern.compile("\\\\");

ワロス
アホすぎるwww

347:デフォルトの名無しさん
09/08/20 21:43:56
よし、夏休み最後の一週間はJavaを勉強しちゃうゾ! ><

348:デフォルトの名無しさん
09/08/21 20:54:36
>>347
20行係を任ず

349:デフォルトの名無しさん
09/08/23 19:53:56
正規表現を使いこなしてる人でも、間違った正規表現を書いちゃうことってよくあるの?

350:デフォルトの名無しさん
09/08/23 19:57:39
間違った正規表現すら使いこなすよ

351:デフォルトの名無しさん
09/08/23 21:52:56
間違ってる事がわからないから、全部正解

352:デフォルトの名無しさん
09/08/23 23:10:06
想定したパターンが間違ってたってことは割とある
単語の文字列にハイフンが含まれることを考慮してなかったり

353:デフォルトの名無しさん
09/08/24 22:19:40
>>330
すんません、ありがとうございます。
シェルよくわからんのでしたが、すんごい参考になりました。

おかげでなんとか出来ました。
ありがとうございます。

354:デフォルトの名無しさん
09/08/25 00:05:17
日本語版でないですかね

Regular Expressions Cookbook
URLリンク(oreilly.com)
URLリンク(www.amazon.com)

355:デフォルトの名無しさん
09/08/25 16:48:49
色々試してみたのですがうまく動かないので教えてください。

●正規表現の使用環境
PHP 5.2.5

●検索か置換か?
検索 & 置換

●説明
絵文字用の文字列変換を考えています。
フォームのテキストエリアに入力された文字列から
##で囲まれた文字列を検索し置換したい。

●対象データ
いい天気ですね##A0F1##!!
(AF01は固定ではないです)

●希望する結果
##AF01##にヒットし、さらにAF01のみに置換したい。

自分が考えた正規表現は /#[2][A-F|0-9]{4}#[2]$/u
ですが、うまく動きません・・どなたかお願いします。

356:デフォルトの名無しさん
09/08/25 17:16:28
PHPはよう知らんが

s/##([A-F0-9]{4})##/$1/g

じゃないのか?



357:デフォルトの名無しさん
09/08/26 01:11:44
>じゃないのか?
って。
そうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。

358:デフォルトの名無しさん
09/08/26 01:12:25
>じゃないのか?
って。
どうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。

359:デフォルトの名無しさん
09/08/26 10:11:15
いま、ものすごくバカっぽいレスを目にした気がした。

360:デフォルトの名無しさん
09/08/26 11:21:38
>どうして質問を質問で返すんだろ。
「質問を質問で返すな」と言い切る自信はないらしい。

361:355
09/08/26 11:28:27
>>356
ご返信ありがとうございます。
試してみたのですが、期待した動作にならなかったです。


362:デフォルトの名無しさん
09/08/26 12:28:28
>>357
ろくに回答もせず、人のレスに難癖付けるだけ、か…

哀れだな


363:355
09/08/26 14:10:51
あれから、色々自分で試行錯誤して

/#{2}([A-F|0-9]{4}#{2})/

でヒットするところまでは持っていけました。
後はなんとかなりそうなので、がんばってみます。
なんだかスレが荒れてしまったみたいで申し訳ありません。

364:デフォルトの名無しさん
09/08/26 14:19:43
おかしいのがはりついてるせいだから、あんま気にせず。

365:デフォルトの名無しさん
09/08/26 14:26:40
PHPはよう知らんが >>356 のでいけたよ。
# s/.../.../g とかは Perl 特有な演算子なのでそこらへんはよしなに

$str = preg_replace('/##([A-F0-9]{4})##/', '$1', $str);

これでどうですか?

366:デフォルトの名無しさん
09/08/26 14:55:40
>これでどうですか?
って。
どうして質問を質問で返すんだろ。
よっぽど自信がないのか。
なんかバカっぽい。

367:デフォルトの名無しさん
09/08/26 15:17:15
マジレスすると

(?:^|[^#])
##([A-F0-9]{4})##
(?:$|[^#])

368:デフォルトの名無しさん
09/08/26 15:28:42
「これでどうですか?」は質問じゃないだろ。

369:367
09/08/26 15:54:37
ん?
「####AF01##」のような文字列も置換していいのか。
条件反射してすまなかった。

370:デフォルトの名無しさん
09/08/26 16:36:03
/#{2}([A-F|0-9]{4}#{2})/ の縦棒(|)は多分こういう意味では?と予想。

/#{2}([A-F]{2}[0-9]{2})#{2}/

371:デフォルトの名無しさん
09/08/26 17:08:01
>>370
「対象データ」の「##A0F1##」にマッチしなさそう、とか。

372:デフォルトの名無しさん
09/08/26 17:40:08
>>370
文字クラスの連結のつもりだったとエスパー。


373:デフォルトの名無しさん
09/08/26 17:46:50
355です。

>>365
ありがとう!まさにこれが期待した動作です。
Perlに詳しくなかったのでPHP風に直せなかった自分の力不足で
動かなかったなどと言ってすみませんでした。

>>367
####AF01##は##「##AF01##」の部分だけ置換したいと思っています。
##は意味もなく使わせないようにしたいのですが、ユーザーがどういう意図で
使うかはわからない部分もあるのでそうしています。

後は答えていただいた方法をうまく組み込んでみます、ありがとうございました。



374:デフォルトの名無しさん
09/08/26 17:51:36
>>372
A-F|0-9はうまい方法が思いつかなかったのでこうしてます。

要するにA-Fまでと0-9までの半角英数字4文字が続いている場合となります。
0CAFの場合もありますし、DA16など4文字は確定で入り乱れている状態です。

これをうまく表現する方法がわからなかったので
調べながら書いてみたら動いたのでとりあえずこれでやってました。

375:デフォルトの名無しさん
09/08/26 18:01:24
>>374
[A-F|0-9]は、A-Fか0-9か'|'という意味だ。
つまり[|A-F0-9]や[A-F0-9|]も同じ意味になる。

おまえがやりたいことは[A-F0-9]で出来る。

まだ正規表現に慣れていないみたいだが、
Webアプリ開発では必須のスキルなので
これから勉強していくといい。

まずはフクロウ本を買うところから始めるべし。


376:デフォルトの名無しさん
09/08/26 19:23:33
| は ( ) の中で使うときと { } で使うときでは意味が違う。
最近のガキは前後の文脈で判断せずに
ピンポイントだけ見て反応する。
悪いクセだ。

377:誤字った
09/08/26 19:24:20
| は ( ) の中で使うときと [ ] で使うときでは意味が違う。
最近のガキは前後の文脈で判断せずに
ピンポイントだけ見て反応する。
悪いクセだ。

378:デフォルトの名無しさん
09/08/26 19:38:26
>>377
自己紹介?

379:デフォルトの名無しさん
09/08/26 19:40:23
( ) の中ってなに。。

380:デフォルトの名無しさん
09/08/26 20:38:26
{}かな。

381:デフォルトの名無しさん
09/08/26 23:33:37
拗音の「ぁぃぅぇぉゃゅょァィゥェォャュョ」と促音の「っ」が複数個連続した場合にSAPI5を使うソフトウェアがハングアップします。
ところが「うわぁぁぁぁ」のような表現は日常的に存在しているためにそのたびにハングアップして閉口してます。
正規表現で小さい文字を大きくすることは可能ですか?


382:デフォルトの名無しさん
09/08/26 23:40:53
ょぅι゛ょ

383:デフォルトの名無しさん
09/08/26 23:54:43
s/ょぅι゛ょ/ 妖女/

384:デフォルトの名無しさん
09/08/26 23:57:31
こすると大きくなるよ

385:デフォルトの名無しさん
09/08/27 00:04:25
こすったら膿出てきた

386:デフォルトの名無しさん
09/08/27 00:18:54
淋しい病気ですか

387:デフォルトの名無しさん
09/08/27 00:32:52
>>386
下手糞なツッコミ
もっと激しく!!

388:デフォルトの名無しさん
09/08/27 10:57:46
>>381
s/ぁぃぅぇぉゃゅょゎァィゥェォヶャュョヮ/あいうえおやゆよわアイウエオケヤユヨワ/g

389:デフォルトの名無しさん
09/08/27 11:01:29
性器表現だけじゃできなそうだな。

390:デフォルトの名無しさん
09/08/27 11:20:00
tr/ぁぃぅぇぉゃゅょゎァィゥェォヶャュョヮ/あいうえおやゆよわアイウエオケヤユヨワ/

s/ぁ/あ/g
s/ぃ/い/g
s/ぅ/う/g
s/ぇ/え/g
s/ぉ/お/g
s/ゃ/や/g
s/ゅ/ゆ/g
s/ょ/よ/g
s/ゎ/わ/g
s/ァ/ア/g
s/ィ/イ/g
s/ゥ/ウ/g
s/ェ/エ/g
s/ォ/オ/g
s/ヶ/ケ/g
s/ャ/ヤ/g
s/ュ/ユ/g
s/ョ/ヨ/g
s/ヮ/ワ/g

391:デフォルトの名無しさん
09/08/27 18:29:07
どうでもいいけどそれは SAPI5 とやらを直すべきではないのか?

392:デフォルトの名無しさん
09/08/27 19:12:10
マッチするなら電子メールアドレスである事が保証できる
正規表現を教えて下さい

393:デフォルトの名無しさん
09/08/27 19:24:33
完全にやるのはひどくおおごとで、
かつルール違反のアドレスが結構ある。

とりあえず使えればいいのであれば、メールアドレス 正規表現 で検索

394:デフォルトの名無しさん
09/08/27 19:44:38
DoCoMoもauも、ちょっと前までは連続ドット(RFC違反)の
メールアドレスが普通に作れちゃったから困ったもんだ。

395:デフォルトの名無しさん
09/08/27 19:52:12
>>392

まずググる、という発想すらできない君にはこれがお似合いだよ

.+@.+



396:デフォルトの名無しさん
09/08/27 21:16:55
>>391
「暗いと不平を言うよりも、すすんで明かりをつけましょう」

397:デフォルトの名無しさん
09/08/27 22:41:53
>>395
それじゃあ
> マッチするなら電子メールアドレスである事が保証できる
を満たしてないだろ。

これなら条件を満たすだろ。

[a-z]{6,30}@gmail.com

398:デフォルトの名無しさん
09/08/27 23:53:56
こっちの方がいい

[^@]+@gmail.com

399:デフォルトの名無しさん
09/08/27 23:58:02
>>397-398
やりがちだよなぁ、\.comとかのエスケープ忘れ
しかもそうそう異常判定が起きないから潜在的なバグになりやすい

400:397
09/08/28 00:26:28
>>399
ごめんなさい。反省します。

>>398
それだと「マッチするなら電子メールアドレスであることが保証できる」が満たせないよね。

401:デフォルトの名無しさん
09/08/28 00:57:19
命題トリックだな

402:デフォルトの名無しさん
09/08/28 01:02:24
連. はイケないとか
"に囲まれてるなら@も連.もおkとか
イカレてるわ

403:デフォルトの名無しさん
09/08/28 01:22:04
正規表現だけでなんとかしようって方がイカレてるわ

404:デフォルトの名無しさん
09/08/28 09:38:08
到達できないアドレスは電子メールアドレスとして保証されていると言えるの?

405:デフォルトの名無しさん
09/08/28 12:21:25
一般的には言えないかもしれないけど、
そこはこのスレのお題の範疇を超えるんで、気にしなくて良いんじゃないかと思う。

406:デフォルトの名無しさん
09/08/28 12:30:48
俺はKENT氏が使っているこれを利用してるけど

/[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$/

407:デフォルトの名無しさん
09/08/28 13:25:52
KENT氏(笑)

408:デフォルトの名無しさん
09/08/28 13:30:29
KENT氏()笑

409:デフォルトの名無しさん
09/08/28 13:39:48
はいどうぞ URLリンク(www.din.or.jp)

410:デフォルトの名無しさん
09/08/28 13:43:16
>>409
うんざりしたw

これはRFCが悪い。

411:デフォルトの名無しさん
09/08/28 14:27:48
>>406
これはひどい。
local-partの記号類をまったく受け付けないじゃん。
Gmailの拡張アドレスが弾かれちゃうね。


412:デフォルトの名無しさん
09/08/28 14:29:02
>>411
「マッチするなら電子メールアドレスである事が保証できる 」
を満たせばおkなんじゃないの?

413:デフォルトの名無しさん
09/08/28 14:37:11
極端な話だけど/foo@example\.com/も条件を満たすよ
>>397はそういうジョークだろう


414:デフォルトの名無しさん
09/08/28 15:24:14
>>412
そういう意味ならなおさら >>406 はまるでダメでしょ。
電子メールアドレスでないものも余裕でマッチする。

415:デフォルトの名無しさん
09/08/28 15:27:38
これはどうなん?

URLリンク(search.cpan.org)

416:デフォルトの名無しさん
09/08/28 15:33:15
>>415
ああ、俺もそれ使ってるわ。

日本語の解説はこれな。
URLリンク(blog.livedoor.jp)


417:デフォルトの名無しさん
09/08/28 15:40:45
>>416
そのページにあるリンク先見てて思ったんだが
[.] とか [@] って何の意味があるんだろ。

ときどき目にするんだが。。

418:デフォルトの名無しさん
09/08/28 16:04:50
>>417
[@]はあんまり意味がないと思うけど、[.]は\.を使うよりいい(見やすい?)と、Damian Conway先生が
言ってたような気がする。

419:デフォルトの名無しさん
09/08/28 16:16:48
>>415
そこに書いてある、このモジュールを使えばいいんかな?

RFC::RFC822::Address -- RFC 822 style address validation. - search.cpan.org
URLリンク(search.cpan.org)

420:デフォルトの名無しさん
09/08/28 16:43:24
>>417
[@] は配列が展開されるのを防ぐのかな?

421:デフォルトの名無しさん
09/08/28 16:47:38
>>409
ジョークか?

422:デフォルトの名無しさん
09/08/28 21:11:37
Javaでも20行未満で書けるレベルの処理だろうに。

423:デフォルトの名無しさん
09/08/28 21:23:59
>>422
それもう面白くないよ。

424:デフォルトの名無しさん
09/08/28 22:58:46
    /:::::::ヽ____/::::::::ヽ、
   丿 ::.__  .:::::::::::::  __  ::::ヽ_       ,. 、       /   /
  / /。 ヽ_ヽv /: /。ヽ  ::::::ヽ    ,.〃´ヾ.、  /  /
 / / ̄ ̄√___丶  ̄ ̄\  ::::| / |l     ',  / /
 | .:::::::::: / / tーーー|ヽ     ..::::: ::|r'´  ||--‐r、 ',   javaなら20行で書ける!!
 | .:::::.  ..: |    |ヽ   .,..ィ'´     l',  '.j '.    javaなら20行で書ける!!
 | :::    | |⊂ニヽ| |  'r '´         ',.r '´ !|  \
 | :    | |  |:::T::::| !  l!     ....:.:.:.:.:.:ヽ、   ,l    \
 \:    ト--^^^^^┤   ゝ、.,_ ---‐‐‐----ゝ、ノ

425:デフォルトの名無しさん
09/08/29 02:27:04
ちなみにJavaなら20行未満で書けるぞ

426:デフォルトの名無しさん
09/08/29 07:51:01
\ 地獄ですね

427:名無しさん@そうだ選挙に行こう
09/08/30 09:40:01
「全然」が現れてから次の「。」までに「ない」「なく」「なかった」「ません」が来ない文にマッチさせるには?

428:名無しさん@そうだ選挙に行こう
09/08/30 12:41:16
/全然(?!ない|なく|なかった|ません).*。/

429:名無しさん@そうだ選挙に行こう
09/08/30 13:23:45
松来未祐と金田朋子のRADIOデコピンないと、ひぐらしのなく頃に、本当にすまなかったと思っている、うちのタマ知りませんか
等もマッチしなくなるよ

430:名無しさん@そうだ選挙に行こう
09/08/30 14:01:20
>>429
字面だけで処理しようってんだから、そこまで気にしてやる必要は無いんではないか

431:デフォルトの名無しさん
09/08/30 22:57:51
>>428
"全然勝負にならない。" にマッチしちゃうよ。

432:デフォルトの名無しさん
09/08/31 01:06:53
全然問題ない
全然なくならない

433:デフォルトの名無しさん
09/08/31 01:21:30
>>428
正規表現メモ
URLリンク(www.kt.rim.or.jp)

「よくある勘違い」

434:デフォルトの名無しさん
09/08/31 01:32:27
ツッコまれること前提で片手間に書いたのに、やっとツッコんでもらえたw

/全然(?!.*?(?:ない|なく|なかった|ません)).*?。/
これでどうだ

435:デフォルトの名無しさん
09/08/31 02:32:07
キュウリを突っ込んで欲しいのか?
魚肉ソーセージを突っ込んで欲しいのか?

436:デフォルトの名無しさん
09/09/01 10:08:55
全然((?!ない|なく|なかった|ません).)*。

437:デフォルトの名無しさん
09/09/01 21:27:07
>>434 >>436
検索してみたら「全然参考にならないんだ、悪いけど。」にマッチしてる。

438:デフォルトの名無しさん
09/09/01 22:13:55
>>437
Perl と Ruby で試してマッチしないんだけど、どんな正規表現エンジン使ってるの?

439:デフォルトの名無しさん
09/09/01 22:25:44
>>437
お前のレス全然参考にならないんだ、悪いけど。

440:デフォルトの名無しさん
09/09/01 22:30:23
>>438
これ。内部エンジンがどうなっているのかよく分かんない。
URLリンク(www.kotonoha.gr.jp)

441:デフォルトの名無しさん
09/09/01 23:00:44
>>427 = >>440 なのか?
>>1 をよく読んで出直せ。

442:441
09/09/01 23:09:11
まあいいや。 >>427 = >>440 と仮定して。

>>440 のをちょっと試してみたけど、
「前後文脈の指定について」の後文脈の例を見るとわかるように、
「検索文字列」の直後のパターンを指定したい場合は、
文字列先頭のアンカを指定する必要があるみたい。
例えば >>436 のを参考にこんなんでいけるかと。

^((?!ない|なく|なかった|ません).)*。

443:デフォルトの名無しさん
09/09/01 23:16:52
>>441
ごめんなさい。

>>442
おおお、できた。ありがとう。

444:デフォルトの名無しさん
09/09/04 13:45:50
お時間あればよろしくおねがいします

●正規表現の使用環境
.NET Framework 2.0
●検索か置換か?
置き換え
●説明
ランダムな文字列内に繰り返す言葉を1つにまとめたい
●対象データ
abcdddddde
こんにちちちちちちわ
!+++**!
●希望する結果
abcde
こんにちわ
!+*!

445:デフォルトの名無しさん
09/09/04 14:20:02
>>444
s/(.+?)\1+/$1/g

ドトネトだとこんな感じか

Regex re = new Regex( @"(.+?)\1+" );
Console.WriteLine( re.Replace( "abcdddddde", "$1" ) );

446:デフォルトの名無しさん
09/09/04 14:23:20
s/(.)\1+/$1/g
でもいいな

447:デフォルトの名無しさん
09/09/04 23:46:35
>>445
ありがとうございます、なるほど・・・
PHPだけで他の言語や正規表現はサッパリで、助かりました

448:デフォルトの名無しさん
09/09/04 23:55:59
Javaでもやれ

449:デフォルトの名無しさん
09/09/05 00:56:44
20行で書けるからな

450:デフォルトの名無しさん
09/09/05 09:38:25
PHPでも20行で書けるな

451:デフォルトの名無しさん
09/09/06 15:33:57
●正規表現の使用環境
PCRE7

●検索か置換か?
検索

●説明
HTMLマーク付けされていないURLを探したい

●対象データ
URLリンク(example1.com) <a href="URLリンク(example2.com)">URLリンク(example2.com) URLリンク(example3.com)

●希望する結果
URLリンク(example1.com)
URLリンク(example3.com)

452:デフォルトの名無しさん
09/09/12 19:55:22
「けちなマッチング」ってもっと他の言い方ないの?

453:デフォルトの名無しさん
09/09/12 20:54:51
けちなマッチング、という言い方は知らないのだけど、
非欲張りな繰り返しのこと? それとも逆に強欲な繰り返しのこと?

454:デフォルトの名無しさん
09/09/15 23:24:21
最短一致とかいろいろな言い方あるね

455:デフォルトの名無しさん
09/09/17 13:12:34
●正規表現の使用環境
VBScript

●検索か置換か?
置換

●説明
ソースコードの関数を置換したい

●対象データ
1 FuncA(1,2,3)
2 FuncA(1,FuncB(2,3),4)
3 FuncA(1,"string2,3",4)
4 FuncA(1,2,3):FuncD(1,2,3)

●希望する結果
1 FuncC(3,1,2)
2 FuncC(4,1,FuncB(2,3))
3 FuncC(4,1"string2,3")
4 FuncC(3,1,2):FuncD(1,2,3)
とりあえず対になる()の特定方法が知りたいです・・



456:デフォルトの名無しさん
09/09/17 19:10:43
正規表現以前に、単語単位でFuncA->FuncCを置換したら済む話じゃね?

457:デフォルトの名無しさん
09/09/17 19:59:50
関数の仕様というか引数の順番も変更になってるっぽいからダメそう。

カッコのネストの深さを限定すればあるいは。

458:デフォルトの名無しさん
09/09/17 20:26:50
>>455
ネスト数を限定すれば書けるが汚くなるのは言うまでもない。

459:デフォルトの名無しさん
09/09/18 09:51:28
perlの正規表現の(?PARNO)みたいに再帰を書けるように
拡張されたのを使えばなんとかなるけどあれを正規表現と
呼んでいいのか激しく疑問w

さらに全く正規表現じゃなくなるが頭に

#define FuncA(x,y,z) FuncD(z,x,y)

を追加してcppに食わせれば一発なんだけどね。

% cat hoge
#define FuncA(x,y,z) FuncC(z,x,y)

1 FuncA(1,2,3)
2 FuncA(1,FuncB(2,3),4)
3 FuncA(1,"string2,3",4)
4 FuncA(1,2,3):FuncD(1,2,3)
% cpp hoge
# 1 "hoge"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "hoge"


1 FuncC(3,1,2)
2 FuncC(4,1,FuncB(2,3))
3 FuncC(4,1,"string2,3")
4 FuncC(3,1,2):FuncD(1,2,3)

460:デフォルトの名無しさん
09/09/18 13:14:55
スルーされにくい質問のテンプレと例

●正規表現の使用環境
5.10.0

●検索か置換か?
置換

●説明
先頭の<と行末の>を削除したい

●対象データ
<XXXXXX>
XXXXXX>
<XXXXXX

●希望する結果
XXXXXX


461:デフォルトの名無しさん
09/09/18 13:16:46
スルー力を試されているのか?

462:デフォルトの名無しさん
09/09/18 13:24:16
>461
な、なぜだ…このテンプレつかてるのに。
あ。パールです…

463:デフォルトの名無しさん
09/09/18 13:31:32
> ●正規表現の使用環境
> 5.10.0

言いたいことはわからんでもないが。

464:デフォルトの名無しさん
09/09/18 13:34:45
>463
Linux 2.6.30.5-43.local.fc11.i686.PAE #1 SMP Wed Sep 16
16:46:32 JST 2009 i686 i686 i386 GNU/Linux

あら勘違いしたかな?これでだいじょぶですか?

465:デフォルトの名無しさん
09/09/18 13:39:08
>>460
しむらー、一行目

/^<?(.*?)>?$/
Perlでは実行確認してないけど多分大丈夫だろ

466:デフォルトの名無しさん
09/09/18 13:43:34
>465
うわーありがとう。
もーちょっとだったのに汗
助かりました。

467:455
09/09/18 14:49:49
簡単には出来なそうなんですね。わかりました。
対になる()や[]の一致書式の方はありますか?
これが出来れば結構いろいろ応用がききそうなんですが。


468:デフォルトの名無しさん
09/09/18 15:32:46
厳密な意味での正規表現では無理なことの代表的なものが、括弧の対応。
最近の拡張ではできるものもあるけど、やりかたがそれぞれなので、
一般的に説明できない。

つーかその例のようなのは>>459の言うようにcpp使うのが楽だな。

469:デフォルトの名無しさん
09/09/18 18:48:14
「正規」表現って言い方ってどうよ?

正規分布 normal distribution
正規表現 regular expression


470:デフォルトの名無しさん
09/09/18 19:22:31
別に?

混乱するからどうしてもと言うなら
統計学のnormalを「標準」とでも脳内変換しとけ

471:デフォルトの名無しさん
09/09/18 20:03:18
>>469
何が問題なの?
異なる言語で単語が一対一に写像するなんてことは有り得ないんで、
その程度の不整合でいちいち悩んでると人生辛くなるよ。

472:455
09/09/18 22:35:18
括弧処理には向いていないのでしたか。
それがわかっただけでも満足です。ありがとう。

473:デフォルトの名無しさん
09/09/18 23:05:45
>>181
これ読んでみたけど本当に良い本だった。世界的に認められてるだけのことはある。
数学丸出しなのでかなり難しい内容だけど、オライリーのフクロウ本を一通り読んで
DFAとNFAの違いを知りたいというモチベーションがあれば読み進められるかも。

474:デフォルトの名無しさん
09/09/18 23:16:09
/ヽ(´ー`)人(´∇`)人(`Д´)ノ/

475:デフォルトの名無しさん
09/09/20 20:12:29
カッコの対応を見つけるのって無理なのか・・・。意外だった。

476:デフォルトの名無しさん
09/09/24 21:36:59
C#の正規表現で悩んでいます。
お時間あればよろしくおねがいします

●正規表現の使用環境
.NET Framework 3.5
●検索か置換か?
置き換え
●説明
()の文字を取り除きたい
●対象データ
W(ジョーカー)
W(ルナ)
●希望する結果
W
W

string Title = "W(ジョーカー)";
string nobrackets = "<title>(.*)";
Regex re = new Regex(nobrackets);
Match m = re.Match(Title);
Title = m.Groups["title"].Value;

で、nullなんです。アドバイス乞う…。


477:デフォルトの名無しさん
09/09/24 22:15:26
(1)あんまり弄らなかった方
string Title = "W(ジョーカー)";
string nobrackets = @"(?<title>W)\(.*\)";
Regex re = new Regex(nobrackets);
Match m = re.Match(Title);
Title = m.Groups["title"].Value;

(2)ちょっと弄ってみた方
string Title = "W(ジョーカー)";
string nobrackets = @"\(.*\)";
Regex re = new Regex(nobrackets);
Title = re.Replace(Title, "");

>>476
何がしたいのかをもうちょっと良く考えてみるといい

478:デフォルトの名無しさん
09/09/24 22:15:26
本当に取り除くだけでいいのなら、こんな感じ?
Title = Regex.Replace(Title, @"\(.*?\)", "");

479:デフォルトの名無しさん
09/09/24 22:52:03
thanks!

480:デフォルトの名無しさん
09/09/25 11:17:01
C#の正規表現で質問です。
●正規表現の使用環境
.NET Framework 3.5
●検索か置換か?
置き換え
●説明
ホームページのすべてのタグを取り除きたい
●対象データ
URLリンク(www.asahi.com)
●希望する結果
プレーンテキスト
●現状
');
document.write('');
//-->
などいくつかのタグが残る状況です。
●いま書いている正規表現
Regex regex = new Regex("<.*?>", RegexOptions.Singleline);
html = regexRemoveAllTag.Replace(html,"");


481:デフォルトの名無しさん
09/09/25 11:35:31
>>480
「いま書いている正規表現」の処理の前段で <script>...</script> を削除すると良いと思われ。

482:デフォルトの名無しさん
09/09/25 12:14:56
早速ありがとうございます。
html = Regex.Replace(html, "<script>.*</script>", "");
Regex regex = new Regex("<.*?>", RegexOptions.Singleline);
html = regexRemoveAllTag.Replace(html,"");
としてみましたが、状況に変化なしです。


483:デフォルトの名無しさん
09/09/25 12:56:40
えーと、前段の方は <script.*[^>]>.*?</script> みたいな感じで Multiline で。

484:デフォルトの名無しさん
09/09/25 13:02:57
>>480
何でそうなるかの原因を考えよう。
想定と違う動きをした箇所を比較してみるといい。
document.write('ipt>');
といった、JavaScript内で閉じタグを記述してる箇所に正規表現がひっかかって');が残る。
だから481は<script type= .... </script>を先に除去すればいい、って言ってるのでしょう。

485:デフォルトの名無しさん
09/09/25 13:44:24
> html = Regex.Replace(html, "<script>.*</script>", "");
なんでこっちだけRegex.Replaceなんだ?

たぶん、これでいいんじゃないかな
Regex regex1 = new Regex("<script>.*?</script>", RegexOptions.Singleline);
Regex regex2 = new Regex("<noscript>.*?</script>", RegexOptions.Singleline);
Regex regex3 = new Regex("<.*?>", RegexOptions.Singleline);
html = regex1.Replace(html,"");
html = regex2.Replace(html,"");
html = regex3.Replace(html,"");

486:デフォルトの名無しさん
09/09/25 18:34:41
みなさん、ありがとうございます。
>>485
これがいちばんいけそうです。
URLリンク(www.asahi.com)
をやってみたら、まだ下のほうにだいぶタグが残るのですが…。

>>484
考えながらやってみてはいるのですが、のこったタグの原因はほとんど判読不明…。
たとえば、
impAserver = "URLリンク(imp.asahi.com)";
が残るのですが…。

>>483
実際に試したところ、multilineよりはsinglelineのほうが、タグを除去できる率は高いようです。


487:484
09/09/25 19:22:18
>>486
ほんとに考えてるのかなあ……。
<script>だと<script type="text/.... って書いてあるのに引っかからないわけですよ。

var wc = new WebClient() { Encoding = Encoding.GetEncoding("EUC-JP") };
var html = wc.DownloadString("URLリンク(www.asahi.com) ");
var result = Regex.Replace(html, "<script.*?</script>", "",RegexOptions.Singleline);
result = Regex.Replace(result, "<.*?>", "", RegexOptions.Singleline);
Console.WriteLine(result);

488:デフォルトの名無しさん
09/09/26 02:10:55
考えてない、考えてない・・・
他人の書いたのをコピーしてるだけ。

489:483
09/09/26 02:30:20
>>486
> 実際に試したところ、multilineよりはsinglelineのほうが、タグを除去できる率は高いようです。
率とかそんなんじゃなくてさあ、 HTML のソース見て考えてる?
もうめんどくせえなあ。

490:デフォルトの名無しさん
09/09/29 00:50:56
>>486
えーと、差分を見る方法を用意してる?
処理前と処理後を比較すれば、どこが除去されたのか
すぐ分かるはずなんだけど。

windiffとかWinMergeでも使え。

491:デフォルトの名無しさん
09/10/01 07:09:09
わかりました

492:デフォルトの名無しさん
09/10/01 07:11:38
HTMLのサニタイゼーションに正規表現を使うなと……

493:デフォルトの名無しさん
09/10/01 13:32:47
先頭の改行(LF)を削除するにはどうすればいいのでしょうか?
$text =~ s/^\n//s; では削除されませんでした。

494:493
09/10/01 13:38:11
あ、されてました。
2つ改行がありました。

2つの改行を削除するには、/^\n\n//では削除されませんでした。

495:493
09/10/01 13:42:36
あれ?
これは改行じゃないのかもしれない。
なんかあります。
$textの先頭に改行される何かがあります。
CRLF、CR、LFのいずれもないのに、改行される何かがあるんです。

496:デフォルトの名無しさん
09/10/01 13:46:00
BOMか?

497:493
09/10/01 13:56:53
>>496
BOMじゃないですが、UTF-8です。

498:デフォルトの名無しさん
09/10/01 14:02:12
コード16進で表示すると何が出る?

499:493
09/10/01 14:03:40
/^\n//をやった直後に/^.//で最初の得体も知れない改行を削除しますと、◆の中に?がある文字が2つ出ました。
しかも、次の文字が消滅しました。

500:493
09/10/01 14:06:35
>>498
16進数での開き方を調べます。

501:デフォルトの名無しさん
09/10/01 14:08:20
楽しそうだな。これを機会にコンピュータ上で文字はどのように
表現されているのか勉強するといいと思うよ。

502:493
09/10/01 14:16:26
バイナリエディタで開いてみました。
その不気味な改行の部分は、EF BB BF 0D 0A E3でした。
この正体は何なのでしょうか?

>>501
勉強がんばってみます。

503:493
09/10/01 14:23:57
EF BB BFってどうやらBOMですね。
何とかしてみます。

504:493
09/10/01 14:26:08
でも出力されたテキストをメモ帳で保存したからBOMが付いたのかも知れませんね。
よく分かりませんね。

505:493
09/10/01 14:39:43
すみません。
全てはポックンのミスでした。
改行コード消した後に、改行コード付加してました。
BOMとか関係ありませんでした。
BOMはメモ帳で開いたから付加されただけでした。
0D 0AはCRLFの改行コードでした。
本当にありがとうございました。

506:デフォルトの名無しさん
09/10/02 13:21:12
>>455
勉強がてら、ActivePerl 5.8.8で作ってみた。
色々調べて、いい勉強になった。

my $re1 = qr/(?:[^(),]+|"(?>(?:(?>[^"\\]+)|\\.)*)")*/;
our $re2 = qr/\w+\((?:(??{$re1}),?|(??{$::re2}))*\)/;

my @s = qw{
FuncA(1,2,3)
FuncA(1,FuncB(2,3),4)
FuncA(1,"string2,3",4)
FuncA(1,2,3):FuncD(1,2,3)
FuncA(1,FuncB(2,FuncC(3,"4),(5"),"\","),6)
};

for (@s) {
print "$_\n";
s/FuncA\(($re1|$re2),($re1|$re2),($re1|$re2)\)/FuncC($3,$1,$2)/;
print "$_\n\n";
}

507:デフォルトの名無しさん
09/10/11 23:48:11
VB.NETの正規表現で質問です。
●正規表現の使用環境
.NET Framework 3.5
●検索か置換か?
置き換え
●説明
2行以上の連続した空の行(全角、半角スペースのみの行、または改行のみの行)を2行にしたい。
(1行の空の行は1行のまま、2行の空の行は2行のまま)
●対象データ
AAA

BBB



CCC
●希望する結果
AAA

BBB


CCC
●現状

●いま書いている正規表現
Dim r As Regex = New Regex("<.*?>", RegexOptions.Multiline)

よろしくお願いします。

508:デフォルトの名無しさん
09/10/12 02:31:35
その「いま書いている正規表現」ってのは何を思って書いたの

509:デフォルトの名無しさん
09/10/12 12:20:24
<.*?>  
・・・これは・・・。

510:デフォルトの名無しさん
09/10/12 12:28:14
"3行以上"の"空白行"を最長一致させて、それを2行の空白行に置換すれば良いんじゃない?
今確認出来る環境じゃないんで、適当に書くけども。

([  ]*/n){3}  →  /n/n  に置換。

こんなイメージでどう?スペース入ってるけど、投稿すると消えるとおもう。

511:デフォルトの名無しさん
09/10/12 14:32:25
\n\n\n\nが\n\n\nにならないか?つーかスラッシュ?

((\s| )*\n){2,}

512:デフォルトの名無しさん
09/10/12 14:51:11
4から3にはならん
半分になるだろ

513:デフォルトの名無しさん
09/10/12 15:01:20
え、globalフラグなくてwhlieループとかなの?

514:デフォルトの名無しさん
09/10/12 16:55:11
{3,} なら3以上になるか。

515:デフォルトの名無しさん
09/10/12 22:03:19
レスありがとうございます。
([  ]*\n){3,}
((\s| )*\n){3,}

これで出来そうですね。/は自分の環境の場合\に直します。
[ ]と( )の違いも試してみます。
ありがとうございました。

516:デフォルトの名無しさん
09/10/14 00:43:45
とんちんかんなのかも知れんが、質問させてくださいな。
.NETの正規表現で"abc"という文字列を一回のreplaseで"b"にする方法はありますか?

517:デフォルトの名無しさん
09/10/14 01:28:02
>>516
>>4
つーか例は数個出してくれ
一個だけだと「/abc/を"b"に置換すればいい」とか言われても文句言えないぞ

518:デフォルトの名無しさん
09/10/14 01:37:17
途中から丁寧語になるレスを最近よく見かけるんだが、
流行っているのでしょうか?

519:デフォルトの名無しさん
09/10/14 02:02:46
随分語弊があった。すまんね。

環境:
.NET
目的:
置換
説明:
特定の連続しない2つの文字列を取り除く
対象データ:
ACB
ADCB
AECDB
結果:
C
DC
ECD

520:デフォルトの名無しさん
09/10/14 02:29:11
説明と例がちぐはぐな件
例に倣って、文頭と文末を一文字ずつ省けばいいのか?
それとも説明に則るとして、特定の文字列がAとBならACBCBはどうなるんだ?

521:デフォルトの名無しさん
09/10/14 03:17:30
>>519
AとBをそれぞれ取り除くだけじゃん。
正規表現の必要な話か?

522:デフォルトの名無しさん
09/10/14 13:02:14
[0-9]?[0-9]:[0-9][0-9]J(am|pm)

詳説正規表現の3版を読んでいるのですが
時刻にマッチさせる表現の例として、上のような正規表現が
書かれています。

このJというは、なんですか?誤植かと思って、ネットで正誤表を見てみましたが
誤植ではないみたいです。Jでやると、時刻にマッチしません。やっぱり誤植ですか?
何か意味があるのでしょうか?

523:デフォルトの名無しさん
09/10/14 14:12:48
誤植だと思う。
オライリーにメールすれ。

524:デフォルトの名無しさん
09/10/14 14:43:05
3版の正誤表ってどこにあるの?

525:デフォルトの名無しさん
09/10/14 14:47:48
どもです。
2版の正誤表で確認しました。3版の正誤表はないっぽいですね。


526:デフォルトの名無しさん
09/10/14 14:49:05
ズコー

527:デフォルトの名無しさん
09/10/14 14:58:21
グーグルブックスで、第2版が閲覧出来ました。
問題の箇所を見てみますと、「J」は書かれていないです。
P20の四角でかこわれた解答の部分で
手元の3版では、+SIZEJ*=と書かれています。

>>522で質問した正規表現はP25にかかれていますが
グーグルブックスでは閲覧出来ないページとなっています。

ありがとうございました。

528:デフォルトの名無しさん
09/10/14 19:25:53
初版は
「[0-9]?[0-9]:[0-9][0-9]●(am|pm)」
こんな表現。
●は、60%網点の丸。

529:デフォルトの名無しさん
09/10/14 21:11:01
「●は、60%網点の丸」は、確かふくろう本では空白を見やすくするための記法でしたね。

530:デフォルトの名無しさん
09/10/23 10:12:47
正規表現をつかって
ある原稿の
文末から10文字を抽出しろ。と課題がでたのですが
どうしたらできるでのしょうか

531:デフォルトの名無しさん
09/10/23 10:20:36
課題なら自分で考えろよ

532:デフォルトの名無しさん
09/10/23 10:21:54
文末に密着した任意の文字10個の正規表現でマッチさせればできるだろ
宿題は自分でやれ

533:デフォルトの名無しさん
09/10/23 10:26:17
文末が文章の終わりなのか、文の終わりなのか分からないが……

.{10}$

534:デフォルトの名無しさん
09/10/23 11:01:52
ワードの文章の文末表現を10文字程度抽出して分類せよ、という問題でした。


申し訳ないのですが本当によくわからないので、
検索する文字列、置換後文字列それぞれにどう入力したらいいのか教えてくれませんか。

535:デフォルトの名無しさん
09/10/23 11:22:26
ワードwww

あれ正規表現じゃなかったような
ヘルプ見るかぐぐれ、それでもわからないならあきらめろマジで

536:デフォルトの名無しさん
09/10/23 11:35:34
いやだからさ
課題ってのは自分で考えてやらないと意味ないでしょ?
ここで答え教えて貰ってそれ提出すればそれでいいと思ってるの?

537:デフォルトの名無しさん
09/10/23 12:02:34
「オプション」「ワイルドカードを使用する」
「??????????。」

538:デフォルトの名無しさん
09/10/23 12:05:07
>>537
>>536みたいな文章の文末が判定できませんやりなおし

539:デフォルトの名無しさん
09/10/23 12:14:36
??????????[。??]

540:デフォルトの名無しさん
09/10/23 12:38:32
ワードの文章、抽出して分類…ワードのスレで聞いたら?

541:デフォルトの名無しさん
09/10/23 12:50:48
甘やかすな
課題は自分で考えさせるべきだ

542:デフォルトの名無しさん
09/10/23 13:23:10
抽出するなら、VBAの知識が必要かもな

543:デフォルトの名無しさん
09/10/24 08:54:18
VBSのregexpを呼び出して使う感じかなぁ。

544:デフォルトの名無しさん
09/10/26 11:37:03
特定の1文字をグループで取り出し、その1文字を後方参照で否定で使いたいのですが、
うまくいきません。つまり[^\1]がうまく動作しません(構文エラーにはならないのですが)。
おそらく\1は1文字でなく文字列なので文字クラスの中で使えないのだと思いますが、
では\1を否定で使うにはどうしたらいいですか。(!\1)なんてありませんよね。

545:デフォルトの名無しさん
09/10/26 12:48:08
>>544
>>1

まず処理系を明示しろ

546:デフォルトの名無しさん
09/10/26 12:48:50
ものによるけど否定先読みでどうにかならん?

547:デフォルトの名無しさん
09/10/26 13:00:29
perlなら

/(.)(?!\1)./

でいけたよ。

548:デフォルトの名無しさん
09/10/27 00:09:38
●正規表現の使用環境
VB.NET

●検索か置換か?
検索

●説明
htmlタグの外にある文字を取得したい

●対象データ
<hoge hoge hoge hoge>
<hoge>
<hoge>
<hoge hoge hoge>
あいうえお
<hoge hoge>
<hoge hoge hoge hoge hoge>

●希望する結果
あいうえお

対象のデータの中にはタグの外の文字列は1箇所(1行)しかありません。
何行目にあるかは不明です。

お願い致します。


549:デフォルトの名無しさん
09/10/27 01:24:47
>>548
説明からするとサンプルのようにきれいに揃っていそうだし
"<"で始まらない行を抽出(もしくは始まる行を削除)で十分かもしれない

VB.netは知らないから具体例はパス

550:544
09/10/27 02:03:55
すみません。処理系はC#です。
否定先読みという機能を勉強したところ、C#の正規表現にも先読みは
あったので、これで実現することができました。ご教授有難うございました

551:デフォルトの名無しさん
09/11/01 11:23:38
javascript

抽出

1回では難しそうなので2回に分けてやっているのですが
str=str.match(処理1)
str=str.match(処理2)
とやるとうまくいきません
下がないと処理1はできます
このやり方では何か問題があるのでしょうか?



552:551
09/11/01 15:39:34
一応自己解決しました
過去のスクリプトを見直していたところ
matchで検索してからsubstringで抜き出していて
試したところうまくいきました
どうも失礼しました



553:デフォルトの名無しさん
09/11/03 13:13:35
おめでとう

554:デフォルトの名無しさん
09/11/06 01:43:16
●正規表現の使用環境
秀丸

●検索か置換か?
置換

●説明
文字列Higを含むが、Highでない文字列を置換

●対象データ
Hig123
HigABC
HighScore

●希望する結果
Hig123
^^^
HigABC
^^^
HighScore


お願いします。

555:デフォルトの名無しさん
09/11/06 01:52:43
マッチ部分はHigだけでいいの?
Hig(?!h)

556:デフォルトの名無しさん
09/11/06 02:09:08
できました、ありがとうございます。

理解できないところがあるので、迷惑でなければ教えてください。

?の効果は、直前のパターンが0回または1回です。
しかし、直前の文字は記号なのでエラーになるように見えます。
現に*や+ではエラーになります。
?はどんな動作をしているのでしょうか?

557:デフォルトの名無しさん
09/11/06 02:22:40
>>555のこと?
(?!pettern)は否定先読みという構文で、その?とは異なる意味

558:デフォルトの名無しさん
09/11/06 02:27:13
555のこと言ってるんなら?じゃなくて
(?!expression) 後方不一致指定でしょ

559:デフォルトの名無しさん
09/11/06 02:29:26
理解できました。
ありがとうございます。

560:デフォルトの名無しさん
09/11/08 23:04:00
PHP5で文字コードはEUCです。
全角半角が混ざった文字列の中から、@******という部分を取り出したいと思っています。
・@の前にはどんな文字があってもいい
・******は半角英数とアンダーバー(_)が使える
・******の後ろにスペースか全角文字かアットマーク(@)が付いたら終わり
という条件で取り出したいのですが、うまくいきません。
@\w+[^ ][\x01-\x7E]
では無理でした。
どのような式を書けばいいのでしょうか?

561:560
09/11/08 23:10:48
具体的には、

こんにちは@Abc_123@Def_456 今日はいい天気

を、

こんにちは[hoge][hoge]今日はいい天気

に置換したいって事です

562:デフォルトの名無しさん
09/11/09 01:21:51
>>560
@[_\w]+
でいいんじゃない?


563:デフォルトの名無しさん
09/11/09 02:50:08
>>562
\w には _ も含まれてるとおも。

564:560
09/11/09 17:24:29
>>562
>>563
ありがとうございます。@[\w]+で出来ました。
まだまだ正規表現は初心者ですが、流石にこれが出来ないのは情けない・・・・・・・

565:デフォルトの名無しさん
09/11/09 17:26:42
@\w+

でおk

566:デフォルトの名無しさん
09/11/11 23:08:14
●正規表現の使用環境
VB.NET
●検索か置換か?
検索
●説明
拡張子をtxt,jpg,gifなど複数の種類を指定してURLを検索したい
●対象データ
http:****/****/****/12345.jpg
http:****/****/****/12345.exe
http:****/****/****/12345.gif
http:****/****/****/12345.txt
http:****/****/****/12345.bmp
●希望する結果
http:****/****/****/12345.jpg
http:****/****/****/12345.gif
http:****/****/****/12345.txt
現在
URLリンク([\w\d)()~_.=+-]+\.jpg
jpgの場合は上記のように書いてありますが、別の拡張子を追加していくにはどうやって書けばよいでしょうか?
URLリンク([\w\d)()~_.=+-]+\.jpg|gif
だと、
http:****/****/****/12345.jpg と
g
にヒットするのですが、[jpg|gif] [(jpg)|(gif)]やURLの部分をカッコで囲んだりしてみましたがだめみたいです。
URLリンク([\w\d)()~_.=+-]+\.jpg|URLリンク([\w\d)()~_.=+-]+\.gif ・・・・・・・
と書けば良いのですが、長くなってしまいます。
拡張子だけを書き足す方法があれば教えていただけないでしょうか。


567:デフォルトの名無しさん
09/11/11 23:17:11
\.(jpg|gif)

568:デフォルトの名無しさん
09/11/11 23:24:08
できましたー
ありがとう。
でもこれ試した気がしたんだが・・・

569:デフォルトの名無しさん
09/11/12 07:24:52
性器表現

570:デフォルトの名無しさん
09/11/12 22:18:10
$hoge = "0123456789ABCDEF012";
$hoge =~ s/.*?([0-9A-F]{16}).*?/$1/i;
print $hoge;

とにかく16進ぽい文字列を16文字で切り出したいので
上みたいに書いたんだけど、切り出せません。
どこが間違ってるかわからないので助けて

571:デフォルトの名無しさん
09/11/12 22:42:35
$hoge = "0123456789ABCDEF012";
$hoge =~ /([[:xdigit:]]{16})/;
print $1, "\n";

572:デフォルトの名無しさん
09/11/12 22:43:43
$hoge = "0123456789ABCDEF012";
$hoge =~ s/.*?([0-9A-F]{16}).*?//i;
print $hoge;
print $1;
としてみりゃ原因わかるんじゃね?

?外して文頭文末明示すればおk

573:デフォルトの名無しさん
09/11/14 17:16:59
「秀丸エディタ」の正規表現の置換がうまくいきません。

作業内容は、
(1)Excelで作成した表を、タブ区切りのテキストデータとして保存し、
(2)「秀丸エディタ」でそのテキストデータを開き、
^(先頭文字)⇒¥t¥t¥t
に全置換しようとしました。

もともとテキストデータであったファイルを置換するときはうまくいきますが、
Excelからエクスポートしたテキストデータは、先頭行を認識してくれないのでしょうか。
どうすれば、先頭行を置換できるでしょうか。

よろしくお願いいたします。

574:デフォルトの名無しさん
09/11/15 01:24:50
先頭文字なのか
先頭行なのか
どっちかハッキリしろ


575:デフォルトの名無しさん
09/11/15 10:10:28
>>574
先頭文字です。
Excelからエクスポートしたテキストに対して^がないと言われてしまうんです。

576:デフォルトの名無しさん
09/11/15 11:33:20
マルチラインの問題とみた。
マルチライン有効になってる?

577:デフォルトの名無しさん
09/11/16 00:48:19
>>576
ありがとうございます。
マルチラインの設定は秀丸側の設定ですか?
それともExcelでしょうか?
初心者ですみません。
早く秀丸を使いこなさないと、ソース書くときに便利なのにもったいないですね。

578:デフォルトの名無しさん
09/11/16 12:20:02
>>577
そんなのどんな初心者でも人間なんだから
「マルチライン 秀丸」と「マルチライン Excel」で検索かけたり、設定見れば大体予想は付くと思うが、
少しは自分の手、動かした方がいいぞ、反感買うから

579:デフォルトの名無しさん
09/11/16 12:27:26
パソコン買ったら最初に覚えること。
それは
     検索
だ!

580:デフォルトの名無しさん
09/11/16 12:28:49
まさか、「□正規表現(R)」 をチェックしてないとかいうオチじゃないだろうな

581:デフォルトの名無しさん
09/11/19 07:06:23
>>577です。
皆さんありがとうございます。
マルチライン、秀丸、excel、テキストなどで検索したのですが、
どこでマルチラインの有効無効をセットできるのか分かりません。
エクセルの各々のセルは、セル内改行を認めていません。
教えていただけないでしょうか。
よろしくお願いいたします。


582:デフォルトの名無しさん
09/11/19 07:43:49
>>575
> Excelからエクスポートしたテキストに対して^がないと言われてしまうんです。

>>580は?

583:デフォルトの名無しさん
09/11/19 07:45:52
念のために書いておくと
置換の時に出てくるダイアログに>>580のチェックボックスがある

584:デフォルトの名無しさん
09/11/19 09:31:15
任意の1文字(なくてもOK)ってのはどうやるの?
「.*」だと文字数制限ないし...

585:デフォルトの名無しさん
09/11/19 09:43:31
一般的には(|.)かな。perl互換なら.?

586:デフォルトの名無しさん
09/11/19 09:47:17
.+

587:デフォルトの名無しさん
09/11/19 10:06:15
改行と空白(全角&半角)以外すべての文字って一気には表現できない?

588:デフォルトの名無しさん
09/11/19 10:42:56
[^\n\s]+
改行またはホワイトスペース(半角スペースとTAB含む)以外の1文字
(改行もホワイトスペースだから複数行対象のときは\n不要かもね)

[^\n\s ]+
全角スペースは文字コードにもよると思うので処理系依存かな

589:デフォルトの名無しさん
09/11/19 18:44:49
>>584

.?

590:デフォルトの名無しさん
09/11/20 01:22:54
>>587
なんで >>1 を読まないかな?

591:デフォルトの名無しさん
09/11/21 08:57:37
>>583
そこはチェックを入れています。
別のcsvで試したら、1行目のタイトル行だけ先頭行を認識し、2行目からのデータ行の先頭行は認識しませんでした
(T_T)。

592:デフォルトの名無しさん
09/11/21 09:31:53
だから、マルチラインがtrueになってないんだろ。

593:デフォルトの名無しさん
09/11/21 09:37:18
どうもやりたいことがよくわからんな

594:デフォルトの名無しさん
09/11/21 09:55:04
困ってるという割にのんびりしてるな

そういう独自の用語じゃなくて
どういうデータをどうしたいのか具体的に書いて
秀丸スレでもう一度聞いたほうがマシな気がする

595:デフォルトの名無しさん
09/11/21 10:51:27
マルチラインが無効になってりゃ、改行記号が無視されるんだから、
先頭以外の改行は改行とみなされないんだよ。

だから2行目以降の先頭は、先頭とみなされていない。
改行記号に続く文字列って事。
改行記号を改行記号として認識させるのがマルチライン。

マルチライン問題じゃなかったらお手上げ。

596:デフォルトの名無しさん
09/11/21 11:08:48
せめて >4のテンプレ埋めるくらいはしてくれんと。
Excel、秀丸共に現役バージョンが混在してるソフトなんだし
環境晒しもせず、できませんできません言われてもどうしようもない

WinXPSP3 / Excel 2002(Office XP) SP3 / 秀丸8β25 (HMJRE V2.06)
とりあえず↑の環境では
・Excelコピー→秀丸へペースト
・名前を付けて保存:テキスト(タブ区切り)→秀丸で開く
のどちらでも問題なくできたよ。

597:デフォルトの名無しさん
09/11/21 12:28:52
マルチライン、マルチラインって言ってるヤツ、バカじゃねぇの?

598:デフォルトの名無しさん
09/11/21 14:49:56
●正規表現の使用環境
Java1.6

●検索か置換か?
検索

●説明
雑多な文字列からスラッシュで終わるURLを抽出したい

●対象データ
今日はURLリンク(abcd.efgh)でご飯を食べました
そしたらURLリンク(12345)なスープが出てきてビックリ
おまけにURLリンク(aiueo)こんなデザートまで

●希望する結果
URLリンク(abcd.efgh)


599:598
09/11/21 15:27:20
●パターン
(URLリンク(|https:)){1}[\w\_\.\-/:\#\?\=\&\;\%\~\+]+/[^A-Za-z0-9\_\.\-/:\#\?\=\&\;\%\~]

●結果
URLリンク(abcd.efgh)


最後に一文字付いてしまいます
どうやって付かないようにすれば良いでしょうか

600:デフォルトの名無しさん
09/11/21 17:14:20
否定の先読み使え

601:デフォルトの名無しさん
09/11/24 03:17:06
2 文字目以降にマッチする正規表現はどのように記述したら良いですか?
例えば "abcXdXefgXXhij" という文字列の、2番目以降全ての "X" にマッチするようなものです。
基本的そうなのですが、ちっとも思いつきませんでした。

602:デフォルトの名無しさん
09/11/24 09:13:58
2文字目以降ってのが何を指してるのかわからんな。
その例だとどれにマッチすればいいんだ?

603:601
09/11/24 09:43:31
>>602

すいません、いろいろ書き忘れてました。
こんな感じです。

- 使用環境: AutoHotkey 1.0.48
- 使用法: 検索
- 説明: 下記にある文字 X を、最初だけ残して残りを Y に置換したい

"abcXdXefgXXhij" -> "abcXdYefgYYhij"


604:デフォルトの名無しさん
09/11/24 09:55:19
AutoHotKeyならRegExReplaceで開始位置を指定できるので、
最初のXの次の文字からにすりゃいいんじゃねーの?

605:601
09/11/24 10:14:23
>>604
そうでした、ありがとうございます。
こんな感じでできました。

RegExReplace(str, "X", "Y", temp, -1, InStr(str, "X") + 1)

606:デフォルトの名無しさん
09/11/24 19:44:10
IPv6かどうかを調べる正規表現ってどこかにサンプルある?

607:デフォルトの名無しさん
09/11/24 21:06:46
IPv6 regex でググってみるとか

608:デフォルトの名無しさん
09/11/26 00:47:05
IPv6 アドレスの形式チェックを正規表現でやる香具師は池沼。
getaddrinfo(3) を使え。

ってうちのじっちゃんが言ってた。

609:デフォルトの名無しさん
09/11/26 08:59:16
>>608
inet_ptonだろ

610:606
09/11/26 09:39:14
>>608
JavaScriptとか使って入力段階で一旦弾きたいんですだよ。
サーバ側ではinet_ptonなりなんなり別の手段で再チェックするけど。

611:デフォルトの名無しさん
09/11/26 09:47:28
>>610
はやくぐぐれよ

URLリンク(www.google.co.jp)

612:デフォルトの名無しさん
09/11/26 10:42:06
>>608
いのなかのかわず

613:デフォルトの名無しさん
09/11/26 13:47:57
鬼車でひいひい言わせてやるよ

614:デフォルトの名無しさん
09/11/26 23:51:33
>>609
inet_pton(3) のことは綺麗さっぱり忘れろ。

ってうちの itojun が言ってた。

615:デフォルトの名無しさん
09/11/27 11:50:16
●正規表現の使用環境
perl5

●検索か置換か?
検索

●説明
クォーテーションに囲まれた(省略可)の文字列を取得したい。

●対象データ
"aaa":'bbb':`ccc`:ddd:eee:666:777:888:999:000:111

●希望する結果
$1:aaa
$2:bbb
$3:ccc
$4:ddd
$5:eee
$6:666
$7:777
$8:888
$9:999
$10:000
$11:111

(["'`]*)([^\1]*)\1):(["'`]*)([^\2]*)\2):(["'`]*)([^\2]*)\2)の形式で、
後方参照が一桁の時はうまく行くんですが、二桁になると不具合がおきます。

(["'`]*)([^\10]*)\10)
\10の下一桁に該当する文字(0)があるとマッチしません。
原因は[^\10]の部分が「\10以外」ではなく「\1と0以外」と解釈される為では
ないかと思いますが、回避する記述方法はありますか?。

616:デフォルトの名無しさん
09/11/27 12:02:52
失礼しました。

(["'`]?)([^\1]*)\1:(["'`]?)([^\3]*)\3:(["'`]?)([^\5]*)\5
(["'`]?)([^\11]*)\11)

$2:aaa
$4:bbb
$6:ccc
$8:ddd
$10:eee
$12:666
$14:777
$16:888
$18:999
$20:000
$22:111

でしたm(__)m。

617:デフォルトの名無しさん
09/11/27 13:26:38
そもそも文字クラス中で\1とかは使えない罠。
[^\1]は文字コードが1の文字以外に解釈されて
いると思われる。

print "match1\n" if 'aa' =~ /(.)[^\1]/;
print "match2\n" if "a\001" =~ /(.)[^\1]/;
print "match3\n" if 'ab' =~ /(.)[^\1]/;

618:デフォルトの名無しさん
09/11/27 13:49:45
1と3だけマッチしますね。「(後方参照としての)\1と0以外」と
解釈される為でも無いということですね。

確かに下一桁が該当する場合に必ず一致しないということでも
なかったので、原因がわからず苦しんでました。ありがとうございます。

^を使用して簡潔に「(二桁で指定する)後方参照の文字を含まない
文字列」は表現できないものでしょうか。

619:デフォルトの名無しさん
09/11/27 14:47:01
クラスの中で使えないということは^で「以外」を
表現することも出来ないということですね…。

perl5なんで(?!regexp) が使えるのかな。



620:デフォルトの名無しさん
09/11/27 15:01:37
クォーテーションに使った文字以外と書きたくなるのはわかるが、
正規表現では書きにくいので最小マッチ.*?でいいんじゃね?

621:デフォルトの名無しさん
09/11/27 15:16:04
最小マッチだと文字間の区切り記号「:」を含む文字列を指定できないんです。
説明不足でした。

●対象データ
"aaa":bbb:"c:c"

●希望する結果
変数1「aaa」
変数2「bbb」
変数3「c:c」
としてマッチさせたいんですが…。

622:デフォルトの名無しさん
09/11/27 23:19:02
/\G(["'`])(.*?)\1(:|$)/

623:デフォルトの名無しさん
09/11/28 00:53:45
実現できました。ありがとう御座いましたm(__)m。

文字列数は固定なのと、クォーテーションは
その文字列内で使わなければ省略できる形が
望ましかったので以下の形にして無事動作しました。

/(?:("?|'|`)(.*?)\1):(?:("?|'|`)(.*?)\3):(?:("?|'|`)(.*?)\5)$/

\Gは始めて知りました。奥深くて理解が追いついてませんが、
勉強したいと思います。

初歩的で恥ずかしいのですが、クォーテーション部分の記述って
「"」または「'」または「`」または「入力なし」を表わすものとして

"?|'|` で正しいのでしょうか

それとも ["'`]? とか他に記述法があるのでしょうか。

624:デフォルトの名無しさん
09/11/28 01:29:40
訂正 "?|'|`では正常に判定されませんでしたm(__)m。


625:デフォルトの名無しさん
09/11/29 13:29:56
"a1a2" =~ /([a-z][0-9])+/
p $1
p $2

これで$1に"a1" $2に"a2"になるようには出来ませんか?
"a1a2" =~ /([a-z][0-9])([a-z][0-9])/
コレなら行くんですが・・・

626:デフォルトの名無しさん
09/11/29 13:36:41


627:デフォルトの名無しさん
09/11/29 15:03:10
エスパー的にはscan使えでよさげ

628:デフォルトの名無しさん
09/11/29 18:56:11
正規表現を学習したいのですが、自分の県には何処に行っても正規表現の本が辞典(リファレンス)以外売っていません
何か段階的に学習出来るお勧めの書物はないでしょうか?


629:デフォルトの名無しさん
09/11/29 18:57:28
とりあえずふくろう本

630:デフォルトの名無しさん
09/11/29 19:45:57
>>628
629さんも言ってる通り、正規表現の本はオライリーのフクロウしか選択肢が無いかも。

あとはネットで勉強すると良いかも。
パターンを何回自分で作ったかによるところが多いから、
PHPチェッカーで作りつつ勉強して、正規表現パズルで息抜きして。
って感じで、フクロウと併用するといいかも。

631:デフォルトの名無しさん
09/11/29 20:07:32
体で覚えるのも一つの方法だな。
オレみたいに頭の弱いヤツなら。
正規表現検索機能つきのテキストエディタで試行錯誤してれば
すぐに覚えられるよ。
unix の ed とか、まるで「正規表現養成ギブス」だもんな。

632:デフォルトの名無しさん
09/11/29 20:09:40
>>631
大丈夫、EDは治療できます。安心してください

633:デフォルトの名無しさん
09/11/29 20:22:11
パズルとかよりエロデータ整理とか
ダウンロードの方が覚えると思うが。。。


634:628
09/11/29 21:36:03
皆さん、ご返答ありがとうございました

635:デフォルトの名無しさん
09/11/30 15:26:13
大量のエロデータとかダウンロードとかそんな興味ないわw

636:デフォルトの名無しさん
09/11/30 15:37:50
実用的にはふくろうもいいけど、オートマトンや言語理論の勉強して
基礎を理解しておくと数学的に無理なことをやろうとしたりとか無駄に
悩まなくてよくなるのでお勧め。

637:デフォルトの名無しさん
09/11/30 16:21:11
実装してみたけど、NFAからDFAへの変換で躓いた俺が通りますよ。

638:デフォルトの名無しさん
09/12/02 06:48:07
「^\w+$」 から 「^_+$」 だけ除外して検索したいのですが、下のような記述でよいでしょうか?
自信がないのでお願いします。たぶん Perl です。

^\w*[a-zA-Z0-9]\w*$

639:デフォルトの名無しさん
09/12/02 08:20:42
Perlだとしたら違うが、Perlじゃないとしても違う

640:デフォルトの名無しさん
09/12/02 09:19:26
>>638
そもそも\wは[a-zA-Z0-9_]じゃないんだが

641:デフォルトの名無しさん
09/12/02 11:35:49
>>638-639
○ 1行内に、1文字以上の、空白を含まない英数単語のみ ^[0-9A-Za-z_]+$ であればマッチする、
○ 但しアンダーラインのみ ^_+$ の連続は単語ではない。
正規表現はPerlの機能の一部として含まれる。すなわち、Perlには正規表現の機能が入っている。
正規表現で出来なくてもPerlなら出来る。

642:デフォルトの名無しさん
09/12/02 12:35:03
perlです。
$str="aa(bb)cc";
$ptn="aa(bb)cc";
のとき、
$str=~/$ptn/;
みたいな書き方でマッチさせたいんですが括弧が邪魔して無理でした。
$strと$ptnの内容は上記のままで、正規表現でマッチさせるにはどう書けば良いのでしょうか?

643:デフォルトの名無しさん
09/12/02 12:40:54
>>642
そういうのはperlのスレで聞けよ。

$quoted_ptn = quotometa($ptn);
$str =~ /$quoted_ptn/

または

$str =~ /\Q$ptn\E/

644:デフォルトの名無しさん
09/12/02 12:42:56
ごめんtypoしてるわ。

quotemetaが正解

645:デフォルトの名無しさん
09/12/02 12:51:49
>>643
いけました。
どうもすいませんでした。
そして、ありがとうございました。


646:427
09/12/03 21:59:36
前方一致(前方参照)について教えてください。

●正規表現の使用環境
秀丸7.11 HMJRE.DLL1.92

●検索か置換か?
検索

●説明
改行(空行)に挟まれたaだけを検索したい

●対象データ


a

a
a


●希望する結果


a ←これだけマッチしてほしい

a
a


647:デフォルトの名無しさん
09/12/03 22:00:06
以下を試しましたがダメでした。
(?<=\n\n)a(?=\n\n)
(?<=^$)a(?=\n\n)

バラして試したところ、どうも後方一致で改行は認識してくれるみたいですが、前方一致では改行はダメのようです。
(?<=\n\n)a ←ダメ
(?<=\n)a ←ダメ
a(?=\n\n) ←OK

そこで知りたいのは、
前方一致で改行を使えないのは仕様でそうなっているからでしょうか?そうした記載を見つけることが出来ませんでした。
また改行(空行)に挟まれた文字を検索する方法がありましたらぜひお教えください。

648:デフォルトの名無しさん
09/12/03 22:22:43
>>647
前方一致って look-behind のこと指して言ってんの?
それはともかく、秀丸は改行絡みの扱いが弱いから制限事項でない?



649:デフォルトの名無しさん
09/12/03 22:33:51
>>646
マッチして欲しいaが空行に挟まれてないじゃん

650:デフォルトの名無しさん
09/12/03 23:42:48
秀丸v8β28なら (?#fulllinematch)\n(a)\n\n(?\1) でできるみたい

前方一致は秀丸で使われている独自用語。一般用語では648のとおり。




651:デフォルトの名無しさん
09/12/03 23:50:50
"(a b)(c d e)"
こういう文字列を
(a b)と(c d e)に分割する事って出来ませんか? 出来ればrubyでお願いします

652:650
09/12/03 23:52:40
おっと間違えた。
(?#fulllinematch)\n\n(a)\n\n(?\1) だ

653:デフォルトの名無しさん
09/12/04 00:46:20
r = /(\(+)
([^\(]+)
(\)+)
/x

"(a b)(c d e)" .scan(r).map do |m|
puts m.to_s
end


654:デフォルトの名無しさん
09/12/04 00:51:04
ありがとうございます
追加で悪いんですが・・・
"(a b)(c (d e))" もし、こういうネスト構文になった場合
正規表現での分割は無理でしょうか?
(a b)
(c (d e))

655:デフォルトの名無しさん
09/12/04 02:39:38
>>654
全ての場合に対応するのは無理

656:646
09/12/04 07:03:25
>>650
ありがとうございました。
なんか最新βからfulllinematchなるものが使えるようになったみたいですね。
実にタイムリーでした。
おまけに (?<=\n\n)a を実行すると「前方一致では改行文字は使えません」なメッセージも表示するようになっていました。
で、「前方一致」って秀丸独自だったんですね。以後注意します。


657:デフォルトの名無しさん
09/12/04 20:12:15
>>653
を少し改良してみて
p "(a b)(c d e)test".scan(/(\([^\(]*\))/)
こうなったんですが
何故^\(を[]で囲わなきゃいけないんでしょうか?

↓のようにかいても意味は同じだと思うんですが動かないんです。かき方が違うんでしょうか?
p "(a b)(c d e)test".scan(/(\(^\(*\))/)
p "(a b)(c d e)test".scan(/(\(.*\))/)

658:デフォルトの名無しさん
09/12/04 20:24:08
正規表現では、[]で囲まれると、他の部分と意味が変わって、
たとえば [^\(] の場合、( 以外の任意の一文字、という意味になる。

659:デフォルトの名無しさん
09/12/04 20:34:02
>>658
^この否定は[]の中でしか使えないんですかね
(a b)と(c d e)に分割するには/(\([^\(]*\))/これが最小コードとなるんでしょうか?

あと>>653さんのかいた//x のxの意味もよくわからず消してしまったんですが、xをつけると何が変わるんでしょう?

660:デフォルトの名無しさん
09/12/04 21:00:25
>>658
[]の中の(はエスケープいらんだろう。

>>659
オマエはマニュアル読むって頭を持ってないのか?


661:デフォルトの名無しさん
09/12/04 21:20:50
>>660
だって、早く簡単にわかるならそのほうがいいじゃないですか。


662:デフォルトの名無しさん
09/12/04 23:11:59
うわぁぁぁ

663:デフォルトの名無しさん
09/12/04 23:52:52
>>660
//xについての記述はぐぐりにくいので見つけられなかったです

664:デフォルトの名無しさん
09/12/05 00:03:30


       | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
       |                    |
       |                    |
       /    ̄ ̄ ̄ ̄      /
       /  ぶち殺すぞ     /
     /              /
     /              /
    /   ____     /
   /             /
 /             /


665:デフォルトの名無しさん
09/12/05 00:05:30
確かに調べるのめんどくさいんですが、
2chはいつから喰わず嫌いをはじめたのか、質問したい

次の方どうぞ

666:デフォルトの名無しさん
09/12/05 11:36:21
釣りはいいから。獣の数字げっと

667:デフォルトの名無しさん
09/12/05 12:02:56
鬼車でひいひいいわせてやるよ

668:デフォルトの名無しさん
09/12/11 15:49:19
諸君、進んでおるかね?

669:デフォルトの名無しさん
09/12/15 18:46:12
●正規表現の使用環境
otbedit(URLリンク(www.hi-ho.ne.jp))というエディタです。
(emEditorでは行をまたいだ置換がうまくいかずotbeditに変えました。使えればソフトにはこだわりません)
Perl互換の拡張正規表現が使えるとのことですが、詳しい説明が書いておらずわかりませんでした。

●検索か置換か?
置換

●説明
特定の文字列の間にある空でない文字列の最後に任意の文字列を加えること
(例では@Bと@Aの間にある空でない文字列の最後にaを付け加えたい。できればそれから@Aと@Bは除外したい)
【@B(.|[\r\n])*?@A】で全体から特定の範囲を指定した後で
【[^\n]+$】→【$&a】の置換の繰り返しで可能ではありましたが、数が多いのでできれば一括で置換したいです。

●対象データ

@A
あいうえお
@B
かき

っくけこ
さしす
@A
せそたち
つてと
@B
なにぬね
のは
@A
ひふへほ

670:デフォルトの名無しさん
09/12/15 18:49:00
●希望する結果

@A
あいうえお
@Ba
かきa

っくけこa
さしすa
@Aa
せそたち
つてと
@Ba
なにぬねa
のはa
@Aa
ひふへほ




↑できれば@Aや@Bにaをつけたくはありません

671:デフォルトの名無しさん
09/12/16 04:39:29
ゼロ幅アサーション

672:デフォルトの名無しさん
09/12/21 01:54:38
誰かCで正規表現できるクラス作れよ
BOOST使いづらすぎる

673:デフォルトの名無しさん
09/12/21 02:34:55
CじゃなくてC++です

674:デフォルトの名無しさん
09/12/21 04:07:23
Boost Regex++じゃ駄目なのか

675:デフォルトの名無しさん
09/12/21 14:59:11
Boost使いづらいです・・・

676:デフォルトの名無しさん
09/12/21 15:27:52
xpressiveもだめ?

677:デフォルトの名無しさん
09/12/21 17:04:49
今出先なので、帰ったら見てみます

678:デフォルトの名無しさん
09/12/22 18:28:13
鬼車ってどうなんでしょうか?

679:デフォルトの名無しさん
09/12/22 19:27:41
どうって?

680:デフォルトの名無しさん
09/12/22 22:41:42
性能?

681:デフォルトの名無しさん
09/12/22 23:06:52
鬼車って確か検索機能しかないよね(置換機能が無い)
置換を自力で実装するの面倒なんで代わりにbregonig.dllとか使うんだけど
文字コードsjisしか使えなくて勿体無いあああってなる

682:デフォルトの名無しさん
09/12/25 19:56:08
●正規表現の使用環境
perl5.8.7 CentOS 5.3
文字コードはEUCです。

●検索か置換か?
置換

●説明
全銀テレ為替文字対応のため、数字、大文字英字、半角カナ・濁点、一部半角記号記号のみの文字列に
変換したいのです。
可能文字はこちら
URLリンク(www.kyodocms.jp)

これら以外の文字を半角スペースに置き換えたいのです。

●対象データ

任意の文字列です。

1.ひらがな→カタカナ変換
2.全角→半角変換
3.英小文字→英大文字変換
4.ァィゥェォッャュョをアイウエオツヤユヨに変換

ここまで出来てて、入力可能文字以外をスペースに置き換えたいんですが、上手くいきません。
どうすればいいでしょうか?


683:デフォルトの名無しさん
09/12/25 20:29:25
[^0-9A-Zアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン゛°\\,\.「」\(\)\-\/]


に置換
あってるかどうかは試してないけどこういうこと?

684:デフォルトの名無しさん
09/12/25 22:49:43
>>683
レスどうもです。そのとおりです。
>>682の条件を変数$regExpに代入し、

$result = 'パ-カ-ヲ買ツタ01234567';
$result =~ s/$regExp/ /g;

とすると、漢字だった部分が文字化けし、「パ-カ-ヲ ・糟・1234567」となってしまいます。
結果は「パ-カ-ヲ ツタ1234567」にしたいのです。


685:デフォルトの名無しさん
09/12/26 00:05:51
未定義領域含んでるんじゃね?
文字の正規表現
URLリンク(www.din.or.jp)

686:デフォルトの名無しさん
09/12/26 00:26:46
質問があります。
<div id=・・・>←1
   <div id=・・・>
   </div>←2
   <div id=・・・>
   </div>←3
</div>←4
抜き出したいのは1から4全体なんですけど
"<div id=・・・(.+?)</div>
で非欲張り系で抜き出すと1から2までヒットします。
1から4全体を抜き出す方法ていうのはないのでしょうか?
XML形式ならいけるぽいのですが・・・
無理なのでしょうか?



687:デフォルトの名無しさん
09/12/26 01:52:00
対応するタグという意味なら田中スペシャルが使えればできる。

688:デフォルトの名無しさん
09/12/26 08:16:39
ていうか素直にXMLパーサ使え

689:デフォルトの名無しさん
09/12/26 12:19:49
HTMLの処理には正規表現ではなくHTMLパーザを、XMLの処理にはXMLパーザを。

テンプレに入れてもいいレベルのFAQ。


690:デフォルトの名無しさん
09/12/27 02:55:21
わかりました。パーサを調べてみます

691:デフォルトの名無しさん
09/12/28 18:29:47
文字列を分割するとき、特定の文字で囲われているものは除外するっていう方法ありますか?
phpなんですけど
preg_splitで例えば
A,B,C,'D,E',F

[0]=A
[1]=B
[2]=C
[3]=D,E
[4]=F

上記のように分割できますか?

692:デフォルトの名無しさん
09/12/28 18:34:35
普通にCSVのモジュール使えばいいのでは

693:デフォルトの名無しさん
09/12/28 19:36:26
>>691
詳説 正規表現 にCSV処理のサンプルあるよ。オヌヌメ

694:デフォルトの名無しさん
09/12/30 15:29:52
●正規表現の使用環境
Java1.5(Firefox 3.0.16)

●検索か置換か?
検索

●説明
\.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jpという文字列を検索したいです。
※検索対象の文字列自体が正規表現のようになっています。

●対象データ
\.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jp

●希望する結果
\.nas(3|5)\d+\.[a-z\-]+\.nttpc.ne.jp
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
※完全一致


自分なりに\を付けたりして試してみたのですが出来ませんでした。
以上、どうかよろしくお願いします。

695:デフォルトの名無しさん
09/12/30 17:02:17
文字列定数内の \ 自体を \\ とするエスケープまで含めて
"\\\\\\.nas\\(3\\|5\\)\\\\d\\+\\\\\\.\\[a\\-z\\\\\\-\\]\\+\\\\\\.nttpc\\.ne\\.jp"
となる

696:デフォルトの名無しさん
09/12/31 10:01:19
>>695
694です。
どうもありがとうございました。
すごく長い表現になっちゃうんですね。(汗


697:デフォルトの名無しさん
09/12/31 15:49:42
こんにちは。
度々すみませんが、よろしくお願いします。

●正規表現の使用環境
Java1.5(Firefox 3.0.16)
●検索か置換か?
検索
●説明
#ipbf\d+souka.saitama.ocn.ne.jp という文字列を検索したいです。
//マッチする
var body = document.body.innerHTML;
var temp1;
temp1 = new RegExp(/#ipbf\\d\+souka.saitama.ocn.ne.jp/);
alert(temp1.test(body));
//マッチしない
var body = document.body.innerHTML;
var word = new Array();
var temp2;
word.push('#ipbf\\d\+souka.saitama.ocn.ne.jp');
for (var i = 0; i < (word.length); i++)
{
 temp2 = new RegExp(word[i]);
 alert(temp2.test(body));
}
●対象データ
#ipbf\d+souka.saitama.ocn.ne.jp
●希望する結果(※完全一致)
#ipbf\d+souka.saitama.ocn.ne.jp
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
「//マッチしない」方の配列内容を変えずに(\を追加せずに)一致させたいです。

以上どうか、よろしくお願いします。

698:デフォルトの名無しさん
09/12/31 16:25:29
Pattern.quote 使えばできるんでない?

699:デフォルトの名無しさん
09/12/31 22:01:43
>>697
word.push(/#ipbf\\d\+souka.saitama.ocn.ne.jp/);

700:デフォルトの名無しさん
09/12/31 22:38:39
>Java1.5(Firefox 3.0.16)
JavaじゃなくてJavaScriptでしょ?それなら>>695は正規表現リテラルでこう書ける
/\\\.nas\(3\|5\)\\d\+\\\.\[a\-z\\\-\]\+\\\.nttpc\.ne\.jp/

701:デフォルトの名無しさん
10/01/02 16:48:00
>>698
>>699
>>700
返事が遅くなりすみません。
レスありがとうございます。
体調が悪くまだよく試していないのですが、まずはお礼だけで失礼します。

702:デフォルトの名無しさん
10/01/03 22:07:34
JavaとJavaScriptが区別できない人っていまだにいるのか…

703:デフォルトの名無しさん
10/01/03 23:16:48
VBとVBAの違いもな。
説明するの大変なんだよな・・・。

704:デフォルトの名無しさん
10/01/03 23:32:15
VBとVBAの違いなんて知らない奴たくさんいるだろ
VB触ってるのは底辺だけなんだから

705:デフォルトの名無しさん
10/01/03 23:55:38
ゲーム機は全て「ファミコン」だ。

706:デフォルトの名無しさん
10/01/04 01:36:20
ファミコンって何だ?
ピコピコのことか?

707:デフォルトの名無しさん
10/01/04 13:05:34
ピコピコはゲームウォッチ系じゃねーの?

知人が20万円ほど出してPC-98を買ったら
姉に「たっかいファミコンやなぁ」と言われたらしい。


708:デフォルトの名無しさん
10/01/05 12:45:41
●正規表現の使用環境
Java1.5
●検索か置換か?
検索
●説明
123456700 とか12345678-00など
7桁から10桁の数字にあと2桁の数字がハイフンもしくは連続して付属する数列の検索。
数列の直前にCodeまたはInvoiceがついてたら除外する。
Invoice 12345678-00 はマッチしないけどaccess# 12345678-00 はマッチする。
"On Invoice 123446789, your order was placed. However, please be sure to note that your account number 789456123 is suspended until further notice."
最初の番号Invoice 123446789は無視するけどaccount number 789456123はマッチするようにしたい。

●対象データ
Invoice 123446789
word 454545454
454545454545
Code: 4085432259
passcode 6789012 06
number 8901234 08
word 454545454 word

●希望する結果
マッチしない
Invoice 123446789
Code: 4085432259
passcode 6789012 06
Code 7890123-07

^(?!(Code|Invoice).)([^=\/%(.]\b\d{7,10}((\d?\d?)|(-\d\d))?\b)
自分でここまでやったけどうまく動かないです。
よろしくお願いいたします。

709:デフォルトの名無しさん
10/01/05 13:09:16
javaならプログラム書けるんだからInvoice,Codeのことはとりあえず
忘れてマッチさせて、そのあとでマッチ位置からさかのぼってCode,
Invoiceがないことを確認する方がたぶん楽だと思うよ。

710:デフォルトの名無しさん
10/01/05 13:09:29
javaならプログラム書けるんだからInvoice,Codeのことはとりあえず
忘れてマッチさせて、そのあとでマッチ位置からさかのぼってCode,
Invoiceがないことを確認する方がたぶん楽だと思うよ。

711:デフォルトの名無しさん
10/01/05 13:10:13
すまん2つ出た

712:デフォルトの名無しさん
10/01/05 14:16:10
ありがとうございます。実際にはJAVAで作成しているわけではなく、アプリケーションがJAVAとおなじ正規表現を使用している環境なので、プログラムを書くことはできないんです。それでここでアドバイスがいただければと思いまして、

713:デフォルトの名無しさん
10/01/05 14:30:07
look-ahead(?!...)じゃなくてlook-behind(?<!...)を使うとこだね。

そしてlook-behindはたいていある決まった長さのの文字列に
マッチするパターンがしか使えないので、

(?<!Invoice: )(?<!Invoice )(?<!Code: )(?<!Code )

のように並べて使うことになるだろう。

必要な仕様がきちんと書かれてないのでこれだというのは
示せないけどがんばれ。

714:デフォルトの名無しさん
10/01/05 14:51:49
●正規表現の使用環境
VB.NET

●検索か置換か?
検索

●説明
タブを含む何かの文字列の複数行を表す方法を教えて

●対象データ
AAAA
TAB TAB hogehoge改行
あああああ
TABT ABT AB hogehoge改行
TAB TAB hogehoge改行
ZZZZ

●希望する結果
あああああ

Regex("AAAA\n([\t.]+?\n)+(?<1>.+?\n)([\t.]+?\n)+ZZZZ",MultiLine)

上のように書いてみましたがだめでした。
AAAA改行とZZZZの間の文字列をターゲットにしつつ
その中にタブか何かの文字の組み合わせの文字列が1つ以上あって、行末に改行がある
という行がいくつかある。
ということを書いたつもりなのですが間違っているところを教えて頂きたいです。


715:デフォルトの名無しさん
10/01/05 15:06:04
[\t.]だとタブまたは任意の文字なので結局[\t.]+?は.+?と書いたのと同じ。
また、~+?とは普通書かないね。~*と同じなので。

\tが少なくとも一つ含まれた行にマッチさせたいなら、

.*\t.*\n

716:デフォルトの名無しさん
10/01/05 15:09:31
いや+?は最短マッチだろ。

717:デフォルトの名無しさん
10/01/05 15:12:27
Multilineなら\nは.に含まれないので、.+?\nと書いても結局.*\nと
同じになるっていいたいんじゃねーの?

718:デフォルトの名無しさん
10/01/05 15:48:20
それをいうなら.+じゃないか

719:デフォルトの名無しさん
10/01/05 16:31:59
前にも .+? と .* が等価だと思ってる人がいたような。
\d? とかの ? と同じものに見えてるのかな。

720:デフォルトの名無しさん
10/01/05 22:00:58
>>715
[\t.] ってブラケットの中にはいってんのなら'.'は単なるピリオドでしょ。


721:デフォルトの名無しさん
10/01/10 22:09:28
Javascriptを勉強中です。といっても、ブックマークレット程度しかやってませんが。
正規表現を練っていたときに、もうかなり以前のブラウザから最短一致(ものぐさ/non-greedy/非貪欲)が
使えるようになっていたことを知り、いま必要というわけではないのですが、詳しく調べてました。

{n,m}? {n,}? *? +? ?? ←これらについては自習して使い方を理解したのですが、{n}? が解りません。
どう考えても {n} と {n}? は同じ結果になるように思えるのです。
正規表現のリファレンスや正規表現を解説しているサイトは数多く見ましたが、量指定子の直後に?を付けた
{n}? を紹介はしていても、その使い方を例示したものを見つけることが出来ませんでした。
どなたか解説していただければ幸いです。よろしくお願いします。

  記号関係はGoogleでも検索しづらいので、なかなか見つかりません。Googleの弱点ですね。

722:デフォルトの名無しさん
10/01/10 22:36:48
googleに頼り切ってるヤツの弱点に見えるけどなぁ

URLリンク(www.kt.rim.or.jp)
>a{n}? = ちょうどn回の繰り返しにマッチします。ちょうどn回なので、a{n}と等価であり、一貫性のためだけに存在します。

要するに/x{1}/の意味を問うているようなもん

723:デフォルトの名無しさん
10/01/11 12:53:43
>>722
的確な回答ありがとうございます。

>googleに頼り切ってるヤツの弱点に見えるけどなぁ
検索ばかりしてるんじゃなく良書を得てそれで勉強せよ、またはGoogleに頼り切ってると
目が節穴になるぞ、というお叱りと理解いたしました。

☆perlretut - Perl の正規表現のチュートリアル
URLリンク(www.kt.rim.or.jp)
これは>>2の一番最初、「正規表現メモ」のページにある一番最初のリンクですね。
答えへの近道はGoogleでなく、このスレにあったようで…目が節穴でした。
このチュートリアルはとても解説が丁寧で、まさしく良書だと思います。これで勉強します。

結論としては /x{n}/ と /x{n}?/ は同じ結果なので、通常 {n}? は使用されない、ですね。

やはりPerlだと細かい情報もしっかりあってスゴイです。
これからは正規表現で悩んだらこのスレとPerlの周辺を当たってみようと思います。

724:デフォルトの名無しさん
10/01/11 15:57:50
>>723
それ、Perlのマニュアルなんだよ。UNIX系のシステムだったら
man perlretut を実行すると表示されるよ。

ウェブを見るより先にマニュアルを読めってことで。



725:デフォルトの名無しさん
10/01/11 16:31:29
.NET のマニュアルにも {n}? は {n} と等価って書いてあるな。
なんか訳が微妙におかしいけど。

URLリンク(msdn.microsoft.com)(VS.80).aspx

726:723
10/01/12 22:05:22
>>724
UNIX系とは縁がありませんが、perlre/perlretutはWeb上にあるので、それをmanの代わりにします。
Javascriptで使える表現かどうかは、以下を見てチェック。
☆RegExp - Core JavaScript 1.5 Reference - Mozilla Developer Center
URLリンク(developer.mozilla.org)
出来るだけ大本の公式情報を参照すべし、ですね。

>>725
情報ありがとうございます。間違ってはいませんが、確かに変ですねぇ。

perlretut、面白いですね-。塩基配列のストップコドンのとことか。
自習してみて、チュートリアルと同じ結果になるのを確認したのはいいのですが…
Javascript:var R=/(\w\w\w)*?TGA/g, S='ATCGTTGAATGCAAATGACATGAC', A = [], I = 0; while(R.test(S)) {A[I] = RegExp.lastMatch + ' (' + RegExp.lastParen + ') Pos=' + R.lastIndex; ++I;} alert(A.join('\n\n'));
なぜずれるのか、理解できず…。その後バックトラックの動作を知り、単に「必ず3文字ずつ進む」と
思い込んでただけだと気付きました。。。マッチにトライして失敗したらそこで終わりではなく、
開始位置を1文字進めるんですね。筆者が仕掛けた罠に見事にハマりました。。。
というか、こういう処理は素直に3文字ずつ取り出して判定すべきですよね。
なお、Javascriptには\Gなんてありませんでした。残念!

727:デフォルトの名無しさん
10/01/13 21:03:05
>726
man じゃなくても perldoc perlretut でいけるよ。

728:デフォルトの名無しさん
10/01/15 16:56:04
>>725
MSDNライブラリは機械翻訳だからしかたないべ


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch