- 1 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 00:36:04 ]
- 正規表現(Regular Expression)スレです。
質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。 【 前スレ 】 正規表現 Part5 pc12.2ch.net/test/read.cgi/tech/1212498448/
- 522 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 13:02:14 ]
- [0-9]?[0-9]:[0-9][0-9]J(am|pm)
詳説正規表現の3版を読んでいるのですが 時刻にマッチさせる表現の例として、上のような正規表現が 書かれています。 このJというは、なんですか?誤植かと思って、ネットで正誤表を見てみましたが 誤植ではないみたいです。Jでやると、時刻にマッチしません。やっぱり誤植ですか? 何か意味があるのでしょうか?
- 523 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:12:48 ]
- 誤植だと思う。
オライリーにメールすれ。
- 524 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:43:05 ]
- 3版の正誤表ってどこにあるの?
- 525 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:47:48 ]
- どもです。
2版の正誤表で確認しました。3版の正誤表はないっぽいですね。
- 526 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:49:05 ]
- ズコー
- 527 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:58:21 ]
- グーグルブックスで、第2版が閲覧出来ました。
問題の箇所を見てみますと、「J」は書かれていないです。 P20の四角でかこわれた解答の部分で 手元の3版では、+SIZEJ*=と書かれています。 >>522で質問した正規表現はP25にかかれていますが グーグルブックスでは閲覧出来ないページとなっています。 ありがとうございました。
- 528 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 19:25:53 ]
- 初版は
「[0-9]?[0-9]:[0-9][0-9]●(am|pm)」 こんな表現。 ●は、60%網点の丸。
- 529 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 21:11:01 ]
- 「●は、60%網点の丸」は、確かふくろう本では空白を見やすくするための記法でしたね。
- 530 名前:デフォルトの名無しさん [2009/10/23(金) 10:12:47 ]
- 正規表現をつかって
ある原稿の 文末から10文字を抽出しろ。と課題がでたのですが どうしたらできるでのしょうか
- 531 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:20:36 ]
- 課題なら自分で考えろよ
- 532 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:21:54 ]
- 文末に密着した任意の文字10個の正規表現でマッチさせればできるだろ
宿題は自分でやれ
- 533 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:26:17 ]
- 文末が文章の終わりなのか、文の終わりなのか分からないが……
.{10}$
- 534 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 11:01:52 ]
- ワードの文章の文末表現を10文字程度抽出して分類せよ、という問題でした。
申し訳ないのですが本当によくわからないので、 検索する文字列、置換後文字列それぞれにどう入力したらいいのか教えてくれませんか。
- 535 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 11:22:26 ]
- ワードwww
あれ正規表現じゃなかったような ヘルプ見るかぐぐれ、それでもわからないならあきらめろマジで
- 536 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 11:35:34 ]
- いやだからさ
課題ってのは自分で考えてやらないと意味ないでしょ? ここで答え教えて貰ってそれ提出すればそれでいいと思ってるの?
- 537 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:02:34 ]
- 「オプション」「ワイルドカードを使用する」
「??????????。」
- 538 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:05:07 ]
- >>537
>>536みたいな文章の文末が判定できませんやりなおし
- 539 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:14:36 ]
- ??????????[。??]
- 540 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:38:32 ]
- ワードの文章、抽出して分類…ワードのスレで聞いたら?
- 541 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:50:48 ]
- 甘やかすな
課題は自分で考えさせるべきだ
- 542 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 13:23:10 ]
- 抽出するなら、VBAの知識が必要かもな
- 543 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 08:54:18 ]
- VBSのregexpを呼び出して使う感じかなぁ。
- 544 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 11:37:03 ]
- 特定の1文字をグループで取り出し、その1文字を後方参照で否定で使いたいのですが、
うまくいきません。つまり[^\1]がうまく動作しません(構文エラーにはならないのですが)。 おそらく\1は1文字でなく文字列なので文字クラスの中で使えないのだと思いますが、 では\1を否定で使うにはどうしたらいいですか。(!\1)なんてありませんよね。
- 545 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:48:08 ]
- >>544
>>1 まず処理系を明示しろ
- 546 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:48:50 ]
- ものによるけど否定先読みでどうにかならん?
- 547 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:00:29 ]
- perlなら
/(.)(?!\1)./ でいけたよ。
- 548 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 01:24:47 ]
- >>548
説明からするとサンプルのようにきれいに揃っていそうだし "<"で始まらない行を抽出(もしくは始まる行を削除)で十分かもしれない VB.netは知らないから具体例はパス
- 550 名前:544 mailto:sage [2009/10/27(火) 02:03:55 ]
- すみません。処理系はC#です。
否定先読みという機能を勉強したところ、C#の正規表現にも先読みは あったので、これで実現することができました。ご教授有難うございました
- 551 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 11:23:38 ]
- javascript
抽出 1回では難しそうなので2回に分けてやっているのですが str=str.match(処理1) str=str.match(処理2) とやるとうまくいきません 下がないと処理1はできます このやり方では何か問題があるのでしょうか?
- 552 名前:551 mailto:sage [2009/11/01(日) 15:39:34 ]
- 一応自己解決しました
過去のスクリプトを見直していたところ matchで検索してからsubstringで抜き出していて 試したところうまくいきました どうも失礼しました
- 553 名前:デフォルトの名無しさん [2009/11/03(火) 13:13:35 ]
- おめでとう
- 554 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 01:43:16 ]
- ●正規表現の使用環境
秀丸 ●検索か置換か? 置換 ●説明 文字列Higを含むが、Highでない文字列を置換 ●対象データ Hig123 HigABC HighScore ●希望する結果 Hig123 ^^^ HigABC ^^^ HighScore お願いします。
- 555 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 01:52:43 ]
- マッチ部分はHigだけでいいの?
Hig(?!h)
- 556 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 02:09:08 ]
- できました、ありがとうございます。
理解できないところがあるので、迷惑でなければ教えてください。 ?の効果は、直前のパターンが0回または1回です。 しかし、直前の文字は記号なのでエラーになるように見えます。 現に*や+ではエラーになります。 ?はどんな動作をしているのでしょうか?
- 557 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 02:22:40 ]
- >>555のこと?
(?!pettern)は否定先読みという構文で、その?とは異なる意味
- 558 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 02:27:13 ]
- 555のこと言ってるんなら?じゃなくて
(?!expression) 後方不一致指定でしょ
- 559 名前:デフォルトの名無しさん mailto:sage [2009/11/06(金) 02:29:26 ]
- 理解できました。
ありがとうございます。
- 560 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 23:04:00 ]
- PHP5で文字コードはEUCです。
全角半角が混ざった文字列の中から、@******という部分を取り出したいと思っています。 ・@の前にはどんな文字があってもいい ・******は半角英数とアンダーバー(_)が使える ・******の後ろにスペースか全角文字かアットマーク(@)が付いたら終わり という条件で取り出したいのですが、うまくいきません。 @\w+[^ ][\x01-\x7E] では無理でした。 どのような式を書けばいいのでしょうか?
- 561 名前:560 mailto:sage [2009/11/08(日) 23:10:48 ]
- 具体的には、
こんにちは@Abc_123@Def_456 今日はいい天気 を、 こんにちは[hoge][hoge]今日はいい天気 に置換したいって事です
- 562 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 01:21:51 ]
- >>560
@[_\w]+ でいいんじゃない?
- 563 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 02:50:08 ]
- >>562
\w には _ も含まれてるとおも。
- 564 名前:560 mailto:sage [2009/11/09(月) 17:24:29 ]
- >>562
>>563 ありがとうございます。@[\w]+で出来ました。 まだまだ正規表現は初心者ですが、流石にこれが出来ないのは情けない・・・・・・・
- 565 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 17:26:42 ]
- @\w+
でおk
- 566 名前:デフォルトの名無しさん mailto:sage [2009/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 現在 [\w\d/%#$&?()~_.=+-]+\.jpg jpgの場合は上記のように書いてありますが、別の拡張子を追加していくにはどうやって書けばよいでしょうか? [\w\d/%#$&?()~_.=+-]+\.jpg|gif だと、 http:****/****/****/12345.jpg と g にヒットするのですが、[jpg|gif] [(jpg)|(gif)]やURLの部分をカッコで囲んだりしてみましたがだめみたいです。 [\w\d/%#$&?()~_.=+-]+\.jpg|[\w\d/%#$&?()~_.=+-]+\.gif ・・・・・・・ と書けば良いのですが、長くなってしまいます。 拡張子だけを書き足す方法があれば教えていただけないでしょうか。
- 567 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 23:17:11 ]
- \.(jpg|gif)
- 568 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 23:24:08 ]
- できましたー
ありがとう。 でもこれ試した気がしたんだが・・・
- 569 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 07:24:52 ]
- 性器表現
- 570 名前:デフォルトの名無しさん mailto:sega [2009/11/12(木) 22:18:10 ]
- $hoge = "0123456789ABCDEF012";
$hoge =~ s/.*?([0-9A-F]{16}).*?/$1/i; print $hoge; とにかく16進ぽい文字列を16文字で切り出したいので 上みたいに書いたんだけど、切り出せません。 どこが間違ってるかわからないので助けて
- 571 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 22:42:35 ]
- $hoge = "0123456789ABCDEF012";
$hoge =~ /([[:xdigit:]]{16})/; print $1, "\n";
- 572 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 22:43:43 ]
- $hoge = "0123456789ABCDEF012";
$hoge =~ s/.*?([0-9A-F]{16}).*?//i; print $hoge; print $1; としてみりゃ原因わかるんじゃね? ?外して文頭文末明示すればおk
- 573 名前:デフォルトの名無しさん [2009/11/14(土) 17:16:59 ]
- 「秀丸エディタ」の正規表現の置換がうまくいきません。
作業内容は、 (1)Excelで作成した表を、タブ区切りのテキストデータとして保存し、 (2)「秀丸エディタ」でそのテキストデータを開き、 ^(先頭文字)⇒¥t¥t¥t に全置換しようとしました。 もともとテキストデータであったファイルを置換するときはうまくいきますが、 Excelからエクスポートしたテキストデータは、先頭行を認識してくれないのでしょうか。 どうすれば、先頭行を置換できるでしょうか。 よろしくお願いいたします。
- 574 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 01:24:50 ]
- 先頭文字なのか
先頭行なのか どっちかハッキリしろ
- 575 名前:デフォルトの名無しさん [2009/11/15(日) 10:10:28 ]
- >>574
先頭文字です。 Excelからエクスポートしたテキストに対して^がないと言われてしまうんです。
- 576 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 11:33:20 ]
- マルチラインの問題とみた。
マルチライン有効になってる?
- 577 名前:デフォルトの名無しさん [2009/11/16(月) 00:48:19 ]
- >>576
ありがとうございます。 マルチラインの設定は秀丸側の設定ですか? それともExcelでしょうか? 初心者ですみません。 早く秀丸を使いこなさないと、ソース書くときに便利なのにもったいないですね。
- 578 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 12:20:02 ]
- >>577
そんなのどんな初心者でも人間なんだから 「マルチライン 秀丸」と「マルチライン Excel」で検索かけたり、設定見れば大体予想は付くと思うが、 少しは自分の手、動かした方がいいぞ、反感買うから
- 579 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 12:27:26 ]
- パソコン買ったら最初に覚えること。
それは 検索 だ!
- 580 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 12:28:49 ]
- まさか、「□正規表現(R)」 をチェックしてないとかいうオチじゃないだろうな
- 581 名前:デフォルトの名無しさん [2009/11/19(木) 07:06:23 ]
- >>577です。
皆さんありがとうございます。 マルチライン、秀丸、excel、テキストなどで検索したのですが、 どこでマルチラインの有効無効をセットできるのか分かりません。 エクセルの各々のセルは、セル内改行を認めていません。 教えていただけないでしょうか。 よろしくお願いいたします。
- 582 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 07:43:49 ]
- >>575
> Excelからエクスポートしたテキストに対して^がないと言われてしまうんです。 >>580は?
- 583 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 07:45:52 ]
- 念のために書いておくと
置換の時に出てくるダイアログに>>580のチェックボックスがある
- 584 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 09:31:15 ]
- 任意の1文字(なくてもOK)ってのはどうやるの?
「.*」だと文字数制限ないし...
- 585 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 09:43:31 ]
- 一般的には(|.)かな。perl互換なら.?
- 586 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 09:47:17 ]
- .+
- 587 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 10:06:15 ]
- 改行と空白(全角&半角)以外すべての文字って一気には表現できない?
- 588 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 10:42:56 ]
- [^\n\s]+
改行またはホワイトスペース(半角スペースとTAB含む)以外の1文字 (改行もホワイトスペースだから複数行対象のときは\n不要かもね) [^\n\s ]+ 全角スペースは文字コードにもよると思うので処理系依存かな
- 589 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 18:44:49 ]
- >>584
.?
- 590 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 01:22:54 ]
- >>587
なんで >>1 を読まないかな?
- 591 名前:デフォルトの名無しさん [2009/11/21(土) 08:57:37 ]
- >>583
そこはチェックを入れています。 別のcsvで試したら、1行目のタイトル行だけ先頭行を認識し、2行目からのデータ行の先頭行は認識しませんでした (T_T)。
- 592 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:31:53 ]
- だから、マルチラインがtrueになってないんだろ。
- 593 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:37:18 ]
- どうもやりたいことがよくわからんな
- 594 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 09:55:04 ]
- 困ってるという割にのんびりしてるな
そういう独自の用語じゃなくて どういうデータをどうしたいのか具体的に書いて 秀丸スレでもう一度聞いたほうがマシな気がする
- 595 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:51:27 ]
- マルチラインが無効になってりゃ、改行記号が無視されるんだから、
先頭以外の改行は改行とみなされないんだよ。 だから2行目以降の先頭は、先頭とみなされていない。 改行記号に続く文字列って事。 改行記号を改行記号として認識させるのがマルチライン。 マルチライン問題じゃなかったらお手上げ。
- 596 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 11:08:48 ]
- せめて >4のテンプレ埋めるくらいはしてくれんと。
Excel、秀丸共に現役バージョンが混在してるソフトなんだし 環境晒しもせず、できませんできません言われてもどうしようもない WinXPSP3 / Excel 2002(Office XP) SP3 / 秀丸8β25 (HMJRE V2.06) とりあえず↑の環境では ・Excelコピー→秀丸へペースト ・名前を付けて保存:テキスト(タブ区切り)→秀丸で開く のどちらでも問題なくできたよ。
- 597 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 12:28:52 ]
- マルチライン、マルチラインって言ってるヤツ、バカじゃねぇの?
- 598 名前:デフォルトの名無しさん [2009/11/21(土) 14:49:56 ]
- ●正規表現の使用環境
Java1.6 ●検索か置換か? 検索 ●説明 雑多な文字列からスラッシュで終わるURLを抽出したい ●対象データ 今日はabcd.efgh/abc/でご飯を食べました そしたら12345/abc/index.htmlなスープが出てきてビックリ おまけにaiueo/test/xxx.imgこんなデザートまで ●希望する結果 abcd.efgh/abc/
- 599 名前:598 [2009/11/21(土) 15:27:20 ]
- ●パターン
(|https://){1}[\w\_\.\-/:\#\?\=\&\;\%\~\+]+/[^A-Za-z0-9\_\.\-/:\#\?\=\&\;\%\~] ●結果 abcd.efgh/abc/で 最後に一文字付いてしまいます どうやって付かないようにすれば良いでしょうか
- 600 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 17:14:20 ]
- 否定の先読み使え
- 601 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 03:17:06 ]
- 2 文字目以降にマッチする正規表現はどのように記述したら良いですか?
例えば "abcXdXefgXXhij" という文字列の、2番目以降全ての "X" にマッチするようなものです。 基本的そうなのですが、ちっとも思いつきませんでした。
- 602 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 09:13:58 ]
- 2文字目以降ってのが何を指してるのかわからんな。
その例だとどれにマッチすればいいんだ?
- 603 名前:601 [2009/11/24(火) 09:43:31 ]
- >>602
すいません、いろいろ書き忘れてました。 こんな感じです。 - 使用環境: AutoHotkey 1.0.48 - 使用法: 検索 - 説明: 下記にある文字 X を、最初だけ残して残りを Y に置換したい "abcXdXefgXXhij" -> "abcXdYefgYYhij"
- 604 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 09:55:19 ]
- AutoHotKeyならRegExReplaceで開始位置を指定できるので、
最初のXの次の文字からにすりゃいいんじゃねーの?
- 605 名前:601 mailto:same [2009/11/24(火) 10:14:23 ]
- >>604
そうでした、ありがとうございます。 こんな感じでできました。 RegExReplace(str, "X", "Y", temp, -1, InStr(str, "X") + 1)
- 606 名前:デフォルトの名無しさん mailto:sega [2009/11/24(火) 19:44:10 ]
- IPv6かどうかを調べる正規表現ってどこかにサンプルある?
- 607 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 21:06:46 ]
- IPv6 regex でググってみるとか
- 608 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 00:47:05 ]
- IPv6 アドレスの形式チェックを正規表現でやる香具師は池沼。
getaddrinfo(3) を使え。 ってうちのじっちゃんが言ってた。
- 609 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 08:59:16 ]
- >>608
inet_ptonだろ
- 610 名前:606 mailto:sage [2009/11/26(木) 09:39:14 ]
- >>608
JavaScriptとか使って入力段階で一旦弾きたいんですだよ。 サーバ側ではinet_ptonなりなんなり別の手段で再チェックするけど。
- 611 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 09:47:28 ]
- >>610
はやくぐぐれよ www.google.co.jp/codesearch?q=IPv6+regex
- 612 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 10:42:06 ]
- >>608
いのなかのかわず
- 613 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 13:47:57 ]
- 鬼車でひいひい言わせてやるよ
- 614 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 23:51:33 ]
- >>609
inet_pton(3) のことは綺麗さっぱり忘れろ。 ってうちの itojun が言ってた。
- 615 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん [2009/11/27(金) 13:49:45 ]
- 1と3だけマッチしますね。「(後方参照としての)\1と0以外」と
解釈される為でも無いということですね。 確かに下一桁が該当する場合に必ず一致しないということでも なかったので、原因がわからず苦しんでました。ありがとうございます。 ^を使用して簡潔に「(二桁で指定する)後方参照の文字を含まない 文字列」は表現できないものでしょうか。
- 619 名前:デフォルトの名無しさん [2009/11/27(金) 14:47:01 ]
- クラスの中で使えないということは^で「以外」を
表現することも出来ないということですね…。 perl5なんで(?!regexp) が使えるのかな。
- 620 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 15:01:37 ]
- クォーテーションに使った文字以外と書きたくなるのはわかるが、
正規表現では書きにくいので最小マッチ.*?でいいんじゃね?
- 621 名前:デフォルトの名無しさん [2009/11/27(金) 15:16:04 ]
- 最小マッチだと文字間の区切り記号「:」を含む文字列を指定できないんです。
説明不足でした。 ●対象データ "aaa":bbb:"c:c" ●希望する結果 変数1「aaa」 変数2「bbb」 変数3「c:c」 としてマッチさせたいんですが…。
- 622 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 23:19:02 ]
- /\G(["'`])(.*?)\1(:|$)/
|

|