1 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 00:36:04 ] 正規表現(Regular Expression)スレです。 質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。 【 前スレ 】 正規表現 Part5 pc12.2ch.net/test/read.cgi/tech/1212498448/
459 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん [2009/09/18(金) 13:14:55 ] スルーされにくい質問のテンプレと例 ●正規表現の使用環境 5.10.0 ●検索か置換か? 置換 ●説明 先頭の<と行末の>を削除したい ●対象データ <XXXXXX> XXXXXX> <XXXXXX ●希望する結果 XXXXXX
461 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:16:46 ] スルー力を試されているのか?
462 名前:デフォルトの名無しさん [2009/09/18(金) 13:24:16 ] >461 な、なぜだ…このテンプレつかてるのに。 あ。パールです…
463 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:31:32 ] > ●正規表現の使用環境 > 5.10.0 言いたいことはわからんでもないが。
464 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:39:08 ] >>460 しむらー、一行目 /^<?(.*?)>?$/ Perlでは実行確認してないけど多分大丈夫だろ
466 名前:デフォルトの名無しさん [2009/09/18(金) 13:43:34 ] >465 うわーありがとう。 もーちょっとだったのに汗 助かりました。
467 名前:455 mailto:sage [2009/09/18(金) 14:49:49 ] 簡単には出来なそうなんですね。わかりました。 対になる()や[]の一致書式の方はありますか? これが出来れば結構いろいろ応用がききそうなんですが。
468 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 15:32:46 ] 厳密な意味での正規表現では無理なことの代表的なものが、括弧の対応。 最近の拡張ではできるものもあるけど、やりかたがそれぞれなので、 一般的に説明できない。 つーかその例のようなのは>>459 の言うようにcpp使うのが楽だな。
469 名前:デフォルトの名無しさん [2009/09/18(金) 18:48:14 ] 「正規」表現って言い方ってどうよ? 正規分布 normal distribution 正規表現 regular expression
470 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:22:31 ] 別に? 混乱するからどうしてもと言うなら 統計学のnormalを「標準」とでも脳内変換しとけ
471 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:03:18 ] >>469 何が問題なの? 異なる言語で単語が一対一に写像するなんてことは有り得ないんで、 その程度の不整合でいちいち悩んでると人生辛くなるよ。
472 名前:455 mailto:sage [2009/09/18(金) 22:35:18 ] 括弧処理には向いていないのでしたか。 それがわかっただけでも満足です。ありがとう。
473 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:05:45 ] >>181 これ読んでみたけど本当に良い本だった。世界的に認められてるだけのことはある。 数学丸出しなのでかなり難しい内容だけど、オライリーのフクロウ本を一通り読んで DFAとNFAの違いを知りたいというモチベーションがあれば読み進められるかも。
474 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:16:09 ] /ヽ(´ー`)人(´∇`)人(`Д´)ノ/
475 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 20:12:29 ] カッコの対応を見つけるのって無理なのか・・・。意外だった。
476 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 22:15:26 ] 本当に取り除くだけでいいのなら、こんな感じ? Title = Regex.Replace(Title, @"\(.*?\)", "");
479 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 22:52:03 ] thanks!
480 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 11:17:01 ] C#の正規表現で質問です。 ●正規表現の使用環境 .NET Framework 3.5 ●検索か置換か? 置き換え ●説明 ホームページのすべてのタグを取り除きたい ●対象データ www.asahi.com/shopping/pc_camera/special/TKY200909240072.html ●希望する結果 プレーンテキスト ●現状 '); document.write(''); //--> などいくつかのタグが残る状況です。 ●いま書いている正規表現 Regex regex = new Regex("<.*?>", RegexOptions.Singleline); html = regexRemoveAllTag.Replace(html,"");
481 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 11:35:31 ] >>480 「いま書いている正規表現」の処理の前段で <script>...</script> を削除すると良いと思われ。
482 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 12:14:56 ] 早速ありがとうございます。 html = Regex.Replace(html, "<script>.*</script>", ""); Regex regex = new Regex("<.*?>", RegexOptions.Singleline); html = regexRemoveAllTag.Replace(html,""); としてみましたが、状況に変化なしです。
483 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 12:56:40 ] えーと、前段の方は <script.*[^>]>.*?</script> みたいな感じで Multiline で。
484 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 13:02:57 ] >>480 何でそうなるかの原因を考えよう。 想定と違う動きをした箇所を比較してみるといい。 document.write('ipt>'); といった、JavaScript内で閉じタグを記述してる箇所に正規表現がひっかかって');が残る。 だから481は<script type= .... </script>を先に除去すればいい、って言ってるのでしょう。
485 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:34:41 ] みなさん、ありがとうございます。 >>485 これがいちばんいけそうです。 www.asahi.com/showbiz/stage/spotlight/OSK200909250086.html をやってみたら、まだ下のほうにだいぶタグが残るのですが…。 >>484 考えながらやってみてはいるのですが、のこったタグの原因はほとんど判読不明…。 たとえば、 impAserver = "imp.asahi.com "; が残るのですが…。 >>483 実際に試したところ、multilineよりはsinglelineのほうが、タグを除去できる率は高いようです。
487 名前:484 mailto:sage [2009/09/25(金) 19:22:18 ] >>486 ほんとに考えてるのかなあ……。 <script>だと<script type="text/.... って書いてあるのに引っかからないわけですよ。 var wc = new WebClient() { Encoding = Encoding.GetEncoding("EUC-JP") }; var html = wc.DownloadString("www.asahi.com/showbiz/stage/spotlight/OSK200909250086.html "); var result = Regex.Replace(html, "<script.*?</script>", "",RegexOptions.Singleline); result = Regex.Replace(result, "<.*?>", "", RegexOptions.Singleline); Console.WriteLine(result);
488 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:10:55 ] 考えてない、考えてない・・・ 他人の書いたのをコピーしてるだけ。
489 名前:483 mailto:sage [2009/09/26(土) 02:30:20 ] >>486 > 実際に試したところ、multilineよりはsinglelineのほうが、タグを除去できる率は高いようです。 率とかそんなんじゃなくてさあ、 HTML のソース見て考えてる? もうめんどくせえなあ。
490 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 00:50:56 ] >>486 えーと、差分を見る方法を用意してる? 処理前と処理後を比較すれば、どこが除去されたのか すぐ分かるはずなんだけど。 windiffとかWinMergeでも使え。
491 名前:デフォルトの名無しさん [2009/10/01(木) 07:09:09 ] わかりました
492 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 07:11:38 ] HTMLのサニタイゼーションに正規表現を使うなと……
493 名前:デフォルトの名無しさん [2009/10/01(木) 13:32:47 ] 先頭の改行(LF)を削除するにはどうすればいいのでしょうか? $text =~ s/^\n//s; では削除されませんでした。
494 名前:493 [2009/10/01(木) 13:38:11 ] あ、されてました。 2つ改行がありました。 2つの改行を削除するには、/^\n\n//では削除されませんでした。
495 名前:493 [2009/10/01(木) 13:42:36 ] あれ? これは改行じゃないのかもしれない。 なんかあります。 $textの先頭に改行される何かがあります。 CRLF、CR、LFのいずれもないのに、改行される何かがあるんです。
496 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 13:46:00 ] BOMか?
497 名前:493 [2009/10/01(木) 13:56:53 ] >>496 BOMじゃないですが、UTF-8です。
498 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 14:02:12 ] コード16進で表示すると何が出る?
499 名前:493 [2009/10/01(木) 14:03:40 ] /^\n//をやった直後に/^.//で最初の得体も知れない改行を削除しますと、◆の中に?がある文字が2つ出ました。 しかも、次の文字が消滅しました。
500 名前:493 [2009/10/01(木) 14:06:35 ] >>498 16進数での開き方を調べます。
501 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 14:08:20 ] 楽しそうだな。これを機会にコンピュータ上で文字はどのように 表現されているのか勉強するといいと思うよ。
502 名前:493 [2009/10/01(木) 14:16:26 ] バイナリエディタで開いてみました。 その不気味な改行の部分は、EF BB BF 0D 0A E3でした。 この正体は何なのでしょうか? >>501 勉強がんばってみます。
503 名前:493 [2009/10/01(木) 14:23:57 ] EF BB BFってどうやらBOMですね。 何とかしてみます。
504 名前:493 [2009/10/01(木) 14:26:08 ] でも出力されたテキストをメモ帳で保存したからBOMが付いたのかも知れませんね。 よく分かりませんね。
505 名前:493 [2009/10/01(木) 14:39:43 ] すみません。 全てはポックンのミスでした。 改行コード消した後に、改行コード付加してました。 BOMとか関係ありませんでした。 BOMはメモ帳で開いたから付加されただけでした。 0D 0AはCRLFの改行コードでした。 本当にありがとうございました。
506 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:31:35 ] その「いま書いている正規表現」ってのは何を思って書いたの
509 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 12:20:24 ] <.*?> ・・・これは・・・。
510 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 12:28:14 ] "3行以上"の"空白行"を最長一致させて、それを2行の空白行に置換すれば良いんじゃない? 今確認出来る環境じゃないんで、適当に書くけども。 ([ ]*/n){3} → /n/n に置換。 こんなイメージでどう?スペース入ってるけど、投稿すると消えるとおもう。
511 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:32:25 ] \n\n\n\nが\n\n\nにならないか?つーかスラッシュ? ((\s| )*\n){2,}
512 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:51:11 ] 4から3にはならん 半分になるだろ
513 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 15:01:20 ] え、globalフラグなくてwhlieループとかなの?
514 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:55:11 ] {3,} なら3以上になるか。
515 名前:デフォルトの名無しさん mailto:sage507 [2009/10/12(月) 22:03:19 ] レスありがとうございます。 ([ ]*\n){3,} ((\s| )*\n){3,} これで出来そうですね。/は自分の環境の場合\に直します。 [ ]と( )の違いも試してみます。 ありがとうございました。
516 名前:デフォルトの名無しさん [2009/10/14(水) 00:43:45 ] とんちんかんなのかも知れんが、質問させてくださいな。 .NETの正規表現で"abc"という文字列を一回のreplaseで"b"にする方法はありますか?
517 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 01:28:02 ] >>516 >>4 つーか例は数個出してくれ 一個だけだと「/abc/を"b"に置換すればいい」とか言われても文句言えないぞ
518 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 01:37:17 ] 途中から丁寧語になるレスを最近よく見かけるんだが、 流行っているのでしょうか?
519 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 02:02:46 ] 随分語弊があった。すまんね。 環境: .NET 目的: 置換 説明: 特定の連続しない2つの文字列を取り除く 対象データ: ACB ADCB AECDB 結果: C DC ECD
520 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 02:29:11 ] 説明と例がちぐはぐな件 例に倣って、文頭と文末を一文字ずつ省けばいいのか? それとも説明に則るとして、特定の文字列がAとBならACBCBはどうなるんだ?
521 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 03:17:30 ] >>519 AとBをそれぞれ取り除くだけじゃん。 正規表現の必要な話か?
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(:|$)/
623 名前:デフォルトの名無しさん [2009/11/28(土) 00:53:45 ] 実現できました。ありがとう御座いましたm(__)m。 文字列数は固定なのと、クォーテーションは その文字列内で使わなければ省略できる形が 望ましかったので以下の形にして無事動作しました。 /(?:("?|'|`)(.*?)\1):(?:("?|'|`)(.*?)\3):(?:("?|'|`)(.*?)\5)$/ \Gは始めて知りました。奥深くて理解が追いついてませんが、 勉強したいと思います。 初歩的で恥ずかしいのですが、クォーテーション部分の記述って 「"」または「'」または「`」または「入力なし」を表わすものとして "?|'|` で正しいのでしょうか それとも ["'`]? とか他に記述法があるのでしょうか。
624 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 01:29:40 ] 訂正 "?|'|`では正常に判定されませんでしたm(__)m。
625 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 13:36:41 ] ?
627 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 15:03:10 ] エスパー的にはscan使えでよさげ
628 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:56:11 ] 正規表現を学習したいのですが、自分の県には何処に行っても正規表現の本が辞典(リファレンス)以外売っていません 何か段階的に学習出来るお勧めの書物はないでしょうか?
629 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:57:28 ] とりあえずふくろう本
630 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:45:57 ] >>628 629さんも言ってる通り、正規表現の本はオライリーのフクロウしか選択肢が無いかも。 あとはネットで勉強すると良いかも。 パターンを何回自分で作ったかによるところが多いから、 PHPチェッカーで作りつつ勉強して、正規表現パズルで息抜きして。 って感じで、フクロウと併用するといいかも。
631 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 20:07:32 ] 体で覚えるのも一つの方法だな。 オレみたいに頭の弱いヤツなら。 正規表現検索機能つきのテキストエディタで試行錯誤してれば すぐに覚えられるよ。 unix の ed とか、まるで「正規表現養成ギブス」だもんな。
632 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 20:09:40 ] >>631 大丈夫、EDは治療できます。安心してください
633 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 20:22:11 ] パズルとかよりエロデータ整理とか ダウンロードの方が覚えると思うが。。。
634 名前:628 mailto:sage [2009/11/29(日) 21:36:03 ] 皆さん、ご返答ありがとうございました
635 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 15:26:13 ] 大量のエロデータとかダウンロードとかそんな興味ないわw
636 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 15:37:50 ] 実用的にはふくろうもいいけど、オートマトンや言語理論の勉強して 基礎を理解しておくと数学的に無理なことをやろうとしたりとか無駄に 悩まなくてよくなるのでお勧め。
637 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 16:21:11 ] 実装してみたけど、NFAからDFAへの変換で躓いた俺が通りますよ。
638 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 06:48:07 ] 「^\w+$」 から 「^_+$」 だけ除外して検索したいのですが、下のような記述でよいでしょうか? 自信がないのでお願いします。たぶん Perl です。 ^\w*[a-zA-Z0-9]\w*$
639 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 08:20:42 ] Perlだとしたら違うが、Perlじゃないとしても違う
640 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 09:19:26 ] >>638 そもそも\wは[a-zA-Z0-9_]じゃないんだが
641 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 11:35:49 ] >>638-639 ○ 1行内に、1文字以上の、空白を含まない英数単語のみ ^[0-9A-Za-z_]+$ であればマッチする、 ○ 但しアンダーラインのみ ^_+$ の連続は単語ではない。 正規表現はPerlの機能の一部として含まれる。すなわち、Perlには正規表現の機能が入っている。 正規表現で出来なくてもPerlなら出来る。
642 名前:デフォルトの名無しさん [2009/12/02(水) 12:35:03 ] perlです。 $str="aa(bb)cc"; $ptn="aa(bb)cc"; のとき、 $str=~/$ptn/; みたいな書き方でマッチさせたいんですが括弧が邪魔して無理でした。 $strと$ptnの内容は上記のままで、正規表現でマッチさせるにはどう書けば良いのでしょうか?
643 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 12:40:54 ] >>642 そういうのはperlのスレで聞けよ。 $quoted_ptn = quotometa($ptn); $str =~ /$quoted_ptn/ または $str =~ /\Q$ptn\E/
644 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 12:42:56 ] ごめんtypoしてるわ。 quotemetaが正解
645 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 12:51:49 ] >>643 いけました。 どうもすいませんでした。 そして、ありがとうございました。
646 名前:427 [2009/12/03(木) 21:59:36 ] 前方一致(前方参照)について教えてください。 ●正規表現の使用環境 秀丸7.11 HMJRE.DLL1.92 ●検索か置換か? 検索 ●説明 改行(空行)に挟まれたaだけを検索したい ●対象データ a a a ●希望する結果 a ←これだけマッチしてほしい a a
647 名前:デフォルトの名無しさん [2009/12/03(木) 22:00:06 ] 以下を試しましたがダメでした。 (?<=\n\n)a(?=\n\n) (?<=^$)a(?=\n\n) バラして試したところ、どうも後方一致で改行は認識してくれるみたいですが、前方一致では改行はダメのようです。 (?<=\n\n)a ←ダメ (?<=\n)a ←ダメ a(?=\n\n) ←OK そこで知りたいのは、 前方一致で改行を使えないのは仕様でそうなっているからでしょうか?そうした記載を見つけることが出来ませんでした。 また改行(空行)に挟まれた文字を検索する方法がありましたらぜひお教えください。
648 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 22:22:43 ] >>647 前方一致って look-behind のこと指して言ってんの? それはともかく、秀丸は改行絡みの扱いが弱いから制限事項でない?
649 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 22:33:51 ] >>646 マッチして欲しいaが空行に挟まれてないじゃん
650 名前:デフォルトの名無しさん [2009/12/03(木) 23:42:48 ] 秀丸v8β28なら (?#fulllinematch)\n(a)\n\n(?\1) でできるみたい 前方一致は秀丸で使われている独自用語。一般用語では648のとおり。
651 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 23:50:50 ] "(a b)(c d e)" こういう文字列を (a b)と(c d e)に分割する事って出来ませんか? 出来ればrubyでお願いします
652 名前:650 [2009/12/03(木) 23:52:40 ] おっと間違えた。 (?#fulllinematch)\n\n(a)\n\n(?\1) だ
653 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 00:46:20 ] r = /(\(+) ([^\(]+) (\)+) /x "(a b)(c d e)" .scan(r).map do |m| puts m.to_s end
654 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 00:51:04 ] ありがとうございます 追加で悪いんですが・・・ "(a b)(c (d e))" もし、こういうネスト構文になった場合 正規表現での分割は無理でしょうか? (a b) (c (d e))
655 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 02:39:38 ] >>654 全ての場合に対応するのは無理
656 名前:646 [2009/12/04(金) 07:03:25 ] >>650 ありがとうございました。 なんか最新βからfulllinematchなるものが使えるようになったみたいですね。 実にタイムリーでした。 おまけに (?<=\n\n)a を実行すると「前方一致では改行文字は使えません」なメッセージも表示するようになっていました。 で、「前方一致」って秀丸独自だったんですね。以後注意します。
657 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 20:24:08 ] 正規表現では、[]で囲まれると、他の部分と意味が変わって、 たとえば [^\(] の場合、( 以外の任意の一文字、という意味になる。
659 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 20:34:02 ] >>658 ^この否定は[]の中でしか使えないんですかね (a b)と(c d e)に分割するには/(\([^\(]*\))/これが最小コードとなるんでしょうか? あと>>653 さんのかいた//x のxの意味もよくわからず消してしまったんですが、xをつけると何が変わるんでしょう?
660 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:00:25 ] >>658 []の中の(はエスケープいらんだろう。 >>659 オマエはマニュアル読むって頭を持ってないのか?
661 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 21:20:50 ] >>660 だって、早く簡単にわかるならそのほうがいいじゃないですか。
662 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:11:59 ] うわぁぁぁ
663 名前:デフォルトの名無しさん mailto:sage [2009/12/04(金) 23:52:52 ] >>660 //xについての記述はぐぐりにくいので見つけられなかったです
664 名前:デフォルトの名無しさん mailto:>>661 [2009/12/05(土) 00:03:30 ] | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | | | | /  ̄ ̄ ̄ ̄ / / ぶち殺すぞ / / / / / / ____ / / / / /
665 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 00:05:30 ] 確かに調べるのめんどくさいんですが、 2chはいつから喰わず嫌いをはじめたのか、質問したい 次の方どうぞ
666 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 11:36:21 ] 釣りはいいから。獣の数字げっと
667 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 12:02:56 ] 鬼車でひいひいいわせてやるよ
668 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 15:49:19 ] 諸君、進んでおるかね?
669 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 18:46:12 ] ●正規表現の使用環境 otbedit(www.hi-ho.ne.jp/a_ogawa/otbedit/index.htm )というエディタです。 (emEditorでは行をまたいだ置換がうまくいかずotbeditに変えました。使えればソフトにはこだわりません) Perl互換の拡張正規表現が使えるとのことですが、詳しい説明が書いておらずわかりませんでした。 ●検索か置換か? 置換 ●説明 特定の文字列の間にある空でない文字列の最後に任意の文字列を加えること (例では@Bと@Aの間にある空でない文字列の最後にaを付け加えたい。できればそれから@Aと@Bは除外したい) 【@B(.|[\r\n])*?@A】で全体から特定の範囲を指定した後で 【[^\n]+$】→【$&a】の置換の繰り返しで可能ではありましたが、数が多いのでできれば一括で置換したいです。 ●対象データ @A あいうえお @B かき っくけこ さしす @A せそたち つてと @B なにぬね のは @A ひふへほ
670 名前:デフォルトの名無しさん [2009/12/15(火) 18:49:00 ] ●希望する結果 @A あいうえお @Ba かきa っくけこa さしすa @Aa せそたち つてと @Ba なにぬねa のはa @Aa ひふへほ ↑できれば@Aや@Bにaをつけたくはありません
671 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 04:39:29 ] ゼロ幅アサーション
672 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:54:38 ] 誰かCで正規表現できるクラス作れよ BOOST使いづらすぎる
673 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 02:34:55 ] CじゃなくてC++です
674 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 04:07:23 ] Boost Regex++じゃ駄目なのか
675 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 14:59:11 ] Boost使いづらいです・・・
676 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 15:27:52 ] xpressiveもだめ?
677 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 17:04:49 ] 今出先なので、帰ったら見てみます
678 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 18:28:13 ] 鬼車ってどうなんでしょうか?
679 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 19:27:41 ] どうって?
680 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 22:41:42 ] 性能?
681 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:06:52 ] 鬼車って確か検索機能しかないよね(置換機能が無い) 置換を自力で実装するの面倒なんで代わりにbregonig.dllとか使うんだけど 文字コードsjisしか使えなくて勿体無いあああってなる
682 名前:デフォルトの名無しさん [2009/12/25(金) 19:56:08 ] ●正規表現の使用環境 perl5.8.7 CentOS 5.3 文字コードはEUCです。 ●検索か置換か? 置換 ●説明 全銀テレ為替文字対応のため、数字、大文字英字、半角カナ・濁点、一部半角記号記号のみの文字列に 変換したいのです。 可能文字はこちら ttp://www.kyodocms.jp/qanda/qa18.htm これら以外の文字を半角スペースに置き換えたいのです。 ●対象データ 任意の文字列です。 1.ひらがな→カタカナ変換 2.全角→半角変換 3.英小文字→英大文字変換 4.ァィゥェォッャュョをアイウエオツヤユヨに変換 ここまで出来てて、入力可能文字以外をスペースに置き換えたいんですが、上手くいきません。 どうすればいいでしょうか?
683 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:29:25 ] [^0-9A-Zアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン゛°\\,\.「」\(\)\-\/] を に置換 あってるかどうかは試してないけどこういうこと?
684 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 22:49:43 ] >>683 レスどうもです。そのとおりです。 >>682 の条件を変数$regExpに代入し、 $result = 'パ-カ-ヲ買ツタ01234567'; $result =~ s/$regExp/ /g; とすると、漢字だった部分が文字化けし、「パ-カ-ヲ ・糟・1234567」となってしまいます。 結果は「パ-カ-ヲ ツタ1234567」にしたいのです。
685 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 00:05:51 ] 未定義領域含んでるんじゃね? 文字の正規表現 www.din.or.jp/~ohzaki/perl.htm#Character
686 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 01:52:00 ] 対応するタグという意味なら田中スペシャルが使えればできる。
688 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 08:16:39 ] ていうか素直にXMLパーサ使え
689 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 12:19:49 ] HTMLの処理には正規表現ではなくHTMLパーザを、XMLの処理にはXMLパーザを。 テンプレに入れてもいいレベルのFAQ。
690 名前:デフォルトの名無しさん [2009/12/27(日) 02:55:21 ] わかりました。パーサを調べてみます
691 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 18:34:35 ] 普通にCSVのモジュール使えばいいのでは
693 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 19:36:26 ] >>691 詳説 正規表現 にCSV処理のサンプルあるよ。オヌヌメ
694 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 17:02:17 ] 文字列定数内の \ 自体を \\ とするエスケープまで含めて "\\\\\\.nas\\(3\\|5\\)\\\\d\\+\\\\\\.\\[a\\-z\\\\\\-\\]\\+\\\\\\.nttpc\\.ne\\.jp" となる
696 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 10:01:19 ] >>695 694です。 どうもありがとうございました。 すごく長い表現になっちゃうんですね。(汗
697 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 16:25:29 ] Pattern.quote 使えばできるんでない?
699 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 22:01:43 ] >>697 word.push(/#ipbf\\d\+souka.saitama.ocn.ne.jp/);
700 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 22:38:39 ] >Java1.5(Firefox 3.0.16) JavaじゃなくてJavaScriptでしょ?それなら>>695 は正規表現リテラルでこう書ける /\\\.nas\(3\|5\)\\d\+\\\.\[a\-z\\\-\]\+\\\.nttpc\.ne\.jp/
701 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 16:48:00 ] >>698 >>699 >>700 返事が遅くなりすみません。 レスありがとうございます。 体調が悪くまだよく試していないのですが、まずはお礼だけで失礼します。
702 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 22:07:34 ] JavaとJavaScriptが区別できない人っていまだにいるのか…
703 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:16:48 ] VBとVBAの違いもな。 説明するの大変なんだよな・・・。
704 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:32:15 ] VBとVBAの違いなんて知らない奴たくさんいるだろ VB触ってるのは底辺だけなんだから
705 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:55:38 ] ゲーム機は全て「ファミコン」だ。
706 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 01:36:20 ] ファミコンって何だ? ピコピコのことか?
707 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 13:05:34 ] ピコピコはゲームウォッチ系じゃねーの? 知人が20万円ほど出してPC-98を買ったら 姉に「たっかいファミコンやなぁ」と言われたらしい。
708 名前:デフォルトの名無しさん [2010/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 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 13:09:16 ] javaならプログラム書けるんだからInvoice,Codeのことはとりあえず 忘れてマッチさせて、そのあとでマッチ位置からさかのぼってCode, Invoiceがないことを確認する方がたぶん楽だと思うよ。
710 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 13:09:29 ] javaならプログラム書けるんだからInvoice,Codeのことはとりあえず 忘れてマッチさせて、そのあとでマッチ位置からさかのぼってCode, Invoiceがないことを確認する方がたぶん楽だと思うよ。
711 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 13:10:13 ] すまん2つ出た
712 名前:デフォルトの名無しさん [2010/01/05(火) 14:16:10 ] ありがとうございます。実際にはJAVAで作成しているわけではなく、アプリケーションがJAVAとおなじ正規表現を使用している環境なので、プログラムを書くことはできないんです。それでここでアドバイスがいただければと思いまして、
713 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 14:30:07 ] look-ahead(?!...)じゃなくてlook-behind(?<!...)を使うとこだね。 そしてlook-behindはたいていある決まった長さのの文字列に マッチするパターンがしか使えないので、 (?<!Invoice: )(?<!Invoice )(?<!Code: )(?<!Code ) のように並べて使うことになるだろう。 必要な仕様がきちんと書かれてないのでこれだというのは 示せないけどがんばれ。
714 名前:デフォルトの名無しさん mailto:sage [2010/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 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 15:06:04 ] [\t.]だとタブまたは任意の文字なので結局[\t.]+?は.+?と書いたのと同じ。 また、〜+?とは普通書かないね。〜*と同じなので。 \tが少なくとも一つ含まれた行にマッチさせたいなら、 .*\t.*\n
716 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 15:09:31 ] いや+?は最短マッチだろ。
717 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 15:12:27 ] Multilineなら\nは.に含まれないので、.+?\nと書いても結局.*\nと 同じになるっていいたいんじゃねーの?
718 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 15:48:20 ] それをいうなら.+じゃないか
719 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 16:31:59 ] 前にも .+? と .* が等価だと思ってる人がいたような。 \d? とかの ? と同じものに見えてるのかな。
720 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 22:00:58 ] >>715 [\t.] ってブラケットの中にはいってんのなら'.'は単なるピリオドでしょ。
721 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 22:09:28 ] Javascriptを勉強中です。といっても、ブックマークレット程度しかやってませんが。 正規表現を練っていたときに、もうかなり以前のブラウザから最短一致(ものぐさ/non-greedy/非貪欲)が 使えるようになっていたことを知り、いま必要というわけではないのですが、詳しく調べてました。 {n,m}? {n,}? *? +? ?? ←これらについては自習して使い方を理解したのですが、{n}? が解りません。 どう考えても {n} と {n}? は同じ結果になるように思えるのです。 正規表現のリファレンスや正規表現を解説しているサイトは数多く見ましたが、量指定子の直後に?を付けた {n}? を紹介はしていても、その使い方を例示したものを見つけることが出来ませんでした。 どなたか解説していただければ幸いです。よろしくお願いします。 記号関係はGoogleでも検索しづらいので、なかなか見つかりません。Googleの弱点ですね。
722 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 22:36:48 ] googleに頼り切ってるヤツの弱点に見えるけどなぁ ttp://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html >a{n}? = ちょうどn回の繰り返しにマッチします。ちょうどn回なので、a{n}と等価であり、一貫性のためだけに存在します。 要するに/x{1}/の意味を問うているようなもん
723 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 12:53:43 ] >>722 的確な回答ありがとうございます。 >googleに頼り切ってるヤツの弱点に見えるけどなぁ 検索ばかりしてるんじゃなく良書を得てそれで勉強せよ、またはGoogleに頼り切ってると 目が節穴になるぞ、というお叱りと理解いたしました。 ☆perlretut - Perl の正規表現のチュートリアル ttp://www.kt.rim.or.jp/~kbk/perl-5.8/perlretut.html これは>>2 の一番最初、「正規表現メモ」のページにある一番最初のリンクですね。 答えへの近道はGoogleでなく、このスレにあったようで…目が節穴でした。 このチュートリアルはとても解説が丁寧で、まさしく良書だと思います。これで勉強します。 結論としては /x{n}/ と /x{n}?/ は同じ結果なので、通常 {n}? は使用されない、ですね。 やはりPerlだと細かい情報もしっかりあってスゴイです。 これからは正規表現で悩んだらこのスレとPerlの周辺を当たってみようと思います。
724 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 15:57:50 ] >>723 それ、Perlのマニュアルなんだよ。UNIX系のシステムだったら man perlretut を実行すると表示されるよ。 ウェブを見るより先にマニュアルを読めってことで。
725 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 16:31:29 ] .NET のマニュアルにも {n}? は {n} と等価って書いてあるな。 なんか訳が微妙におかしいけど。 msdn.microsoft.com/ja-jp/library/3206d374 (VS.80).aspx
726 名前:723 mailto:sage [2010/01/12(火) 22:05:22 ] >>724 UNIX系とは縁がありませんが、perlre/perlretutはWeb上にあるので、それをmanの代わりにします。 Javascriptで使える表現かどうかは、以下を見てチェック。 ☆RegExp - Core JavaScript 1.5 Reference - Mozilla Developer Center ttps://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/RegExp 出来るだけ大本の公式情報を参照すべし、ですね。 >>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 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 21:03:05 ] >726 man じゃなくても perldoc perlretut でいけるよ。
728 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 16:56:04 ] >>725 MSDNライブラリは機械翻訳だからしかたないべ