1 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:07:28 ] 正規表現(Regular Expression)スレです。 質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。 前スレ 正規表現 Part4 pc11.2ch.net/test/read.cgi/tech/1186030400/
294 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 05:53:23 ] >>293 お前ここは初めてか? いいから力抜けよ。
295 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 07:12:33 ] >>294 むしろお前が初めてか? 空気嫁よ
296 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 09:46:51 ] アッー!
297 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 10:05:59 ] 最近の腐女子は正規表現も嗜むのか。 時代は進んでるな。
298 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 11:51:08 ] PHP4での処理をしております $str = preg_replace('/(<br \/>|<br>)/i', '<br />', $str); いろいろやっているうちにチンプンカンプンでしまいには変な顔文字に見えてきて挫折しそうなので どうかご教授お願いします やりたい事は$strの中のbrタグが連続して2つ以上あればそれを1つに置き換えたいです 条件として、<br>と<br />を同じ文字列として考えるのと、たまにbrの間に改行コードがあります <br>\n<br>\n<br /> → <br /> このようにbrタグの間に改行コードがあってもbrタグは連続するものとしたいです よろしくお願いします
299 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 12:13:59 ] php -r '$s="<br>\n<br>\n<br />";echo preg_replace("/((<br>|<br \/>)\n?)+/i", "<br />", $s)."\n";'
300 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 12:21:01 ] brタグのすぐ後ろの改行も吸収してしまうが $s="<br>\n<br><br />\ntest<br>\n\n<br />"; $str = preg_replace("/(<br( +\/)?>\n*)+/i", "<br />", $s);
301 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 13:19:37 ] >>299-300 望みどおりの処理ができました ありがとうございました
302 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:41:07 ] \d+\.\d+\.\d+\.\d+ でIPアドレスを取得しようとしてますが、 127.0.0.1 にだけはマッチさせたく無いです。 どうやったらいいですか?
303 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:16:01 ] (((((((((((((((([^1]*)*(1+[^2][^1]*)*)*)*(1+[^7][^1]*)*)*)*(1+[^.][^1]*)*)*)*(1+[^0][^1]*)*)*)*(1+[^.][^1]*)*)*)*(1+[^0][^1]*)*)*)*(1+[^.][^1]*)*)*)*(1+[^1][^1]*)*)*
304 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:16:18 ] 不可能ではないが2段階に分けたら? なにがなんでもひとつの正規表現でやらなきゃならない?
305 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:18:55 ] >>303 ((((;゚Д゚))))ガクガクブルブル
306 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:23:05 ] >>303 そんなの死んでもイヤです!
307 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:28:43 ] まあIPアドレスなら127.まででもいいとは思うけどな。
308 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:02:00 ] 文字列がIPアドレスのみなら $str="192.168.0.1"; preg_match("/(127\.0\.0\.1)?(.*)/",$str,$m); echo $m[2]; でいけるよな
309 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:29:36 ] 127…でやってみた?
310 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:16:55 ] s/127.0.0.1/うんこ/g /\d+\.\d+\.\d+\.\d+/gp s/うんこ/127.0.0.1/g
311 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:18:12 ] >>309 >308の事なら中身の有無で分岐すればおk
312 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:19:03 ] ドットにエスケープなんているの?
313 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:23:17 ] 可読性
314 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:55:36 ] ドットってエスケープいらないの?
315 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 01:04:01 ] すまない、必要だった エスケープしないと任意の一文字でしたね
316 名前:デフォルトの名無しさん [2008/10/04(土) 01:51:11 ] VC++でマルチバイト(ユニコードではない)日本語文字列を対象とした正規表現ライブラリの定番は何ですか?
317 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 09:19:23 ] Unicodeに変換しちゃだめなの?
318 名前:デフォルトの名無しさん [2008/10/04(土) 21:25:17 ] ユニコード用しかないのか・・・。 VC++でまともな正規表現やろうと思ったら、ユニコード用の正規表現ライブラリしかないんですかね? VBAのRegExpコントロールとか、boostのregexとか。 いますごく困ってるのは、VBAのRegExpコントロールを使ってVC++でMBCSプログラミングをしてるんですが、 MatchオブジェクトのFirstIndexプロパティが文字数単位で返ってくることなんですよ。 MBCSだと、バイト単位でどの位置なのか知りたいのに。 もちろん対象となるテキストの先頭から2バイト文字かどうかを調べていけば、 何文字目が何バイト目かを調べることはできるけど、テキストが長くなると処理速度的に満足できない。 ユニコードで何文字目→MBCSで何バイト目を高速に計算するAPIってないですか?
319 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 21:43:13 ] あと思いつくライブラリは鬼車だけど、どうだろう 何バイト目?ってのは結局頭から見ていくしかないので高速化も難しい でも長いテキストでも見る開始位置を後ろに持っていくぐらいはできるかな
320 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:14:36 ] >>319 鬼車というのはちょっと見てみましたが、クセがありそうなのでやめときます。 文字数→バイト変換はやっぱり先頭から真面目にカウントするしかなさそうですね。 過去のカウント結果を保持するような文字数→バイトカウント専用のクラスを作って、 同じテキストに関するカウントの高速化をするとか工夫してみます。
321 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 10:09:25 ] MBCSの定番と言えばbregexp.dllじゃね?あるいは鬼車を同じIFにしたbregonig.dllとか。 鬼車以上にクセがあるが。
322 名前:デフォルトの名無しさん [2008/10/06(月) 13:33:23 ] 一括置換ソフトを使い、 複数のファイルにて、一括複数行置換をしたく、そのために正規表現を使わなくてはなりません。 色々と試してみてもうまく検索されないので教えてください。 <!--shinobi1--> <script type="text/javascript" src="x7.shidareyanagi.com/ufo/ ここに9桁の英数字があります"></script> <noscript><a href="x7.shidareyanagi.com/bin/gg? ここに9桁の英数字があります" target="_blank"> <img src="x7.shidareyanagi.com/bin/ll? ここに9桁の英数字があります" border="0"></a><br> <span style="font-size:9px"><img style="margin:0;vertical-align:text-bottom;" src="img.shinobi.jp/tadaima/fj.gif " width="19" height="11"> <a href="sbc.rentalurl.net " target="_blank">美容整形</a></span></noscript> <!--shinobi2--> ファイルにより、上記の中で、「ここに9桁の英数字があります」のところがそれぞれ異なります。 その複数ファイルの中で<!--shinobi1-->から<!--shinobi2-->まで囲まれた部分を検索にかける場合、正規表現ではどう書きますでしょうか? 一括置換ソフトは 複数行置換 を使用しております。
323 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 13:37:08 ] >>322 <!--shinobi1-->.*<!--shinobi2--> ではダメなの?
324 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 13:39:04 ] <!--shinobi1-->.*<!--shinobi2-->
325 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 13:57:09 ] 最長一致しちゃうから、.* じゃマズいでしょ。 途中にコメントがないなら、<! を避ければいけそう。
326 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 19:16:41 ] .*? でいいんじゃ
327 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:30:13 ] 最短一致で何か問題あるの?
328 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:59:53 ] だれもそんなことはいってないが
329 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 08:19:34 ] 正規表現を使わなければならない、って云ってるのに やり方が分からないってどういう事だ
330 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 09:48:57 ] その一括置換ソフトとやらが正規表現を使えるってことじゃ?
331 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 10:25:20 ] sedで、 <a href="http://○○<br><br>○○ target="_blank">△△</a> <a href="http://○○○○ target="_blank">△<br><br>△</a> にマッチングして、<br><br>を削除したいのですがどの様な記述になるのでしょうか。
332 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 10:28:10 ] (<br>){2,}
333 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 10:35:57 ] 追加 □□<a href="http://○○<br><br>○○ target="_blank">△△</a>□□ □□<a href="http://○○○○ target="_blank">△<br><br>△</a>□□ 失礼しました。<a href=""></a>の前後にも文字列があります。<a href=""></a><a hr・・・と 繰り返している可能性もあり、<a href=""></a>内で<br><br>が発生している時はsedで取り除きたいのです。
334 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 11:22:35 ] <a href="">.*?(<br>){2,}.*?</a>
335 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 11:33:58 ] >>334 有り難うございます。 <a href=".*?(<br>){2,}.*?</a> と変更しまして、ためしましたと所、 <a href=""></a>○○<br><br>○○<a href=""></a> にもマッチングしてしまいます。
336 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 14:14:50 ] /(<a href=.+?>.*?)<br><br>(.*?<\/a>)/$1$2/ でどうだ
337 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 14:17:50 ] あ、まちごうた。これでどうだ /(<a href=.+?)<br><br>(.*?>)/$1$2/ もしくは /(<a href=[^<>]+?)<br><br>(.*?>)/$1$2/
338 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:13:07 ] >>337 有り難うございます。 会議が入ったので取り敢えずの中間報告です。どちらも100件の小さいログサンプルでは、 <a href="○○<br><br>○○></a>にはちゃんと働いてくれました。 良い感じだったのですが、<a href="△△">○○<br><br>○○</a>□□<a href="・・・ とリンク文字間に<br><br>が有る場合は反応いたしませんでした。
339 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 20:37:43 ] このスレに複数のbrタグを一つにする正規表現があるから それを活用するといいよ
340 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 17:14:42 ] その妙なHTMLを吐き出してる奴を修正する。
341 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:22:59 ] C#の正規表現で、「スペース(半角、空白)か改行しかない」という 条件はどう表現するのでしょうか。 ^\s+\n と ^\s*$ を組み合わせる事で表現出来たような気したんですが ------ a ------ もマッチしてしまいます。
342 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 20:46:45 ] 空白が何を指すのかちょっとわからないけど ^\s+$ か ^\s*$で通常なら事足りるはず メソッドの使い方間違えてるかもしれないから とりあえずC#のコード貼ってみて
343 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 21:55:13 ] >>342 親切に有り難う御座います。 ^\s+$ で無事マッチさせる事が出来ました。 一応メソッドの方は汚いですが抜粋すると以下の様にして判定しており buffの中に正規表現が入っていてstTargetを判定している感じです。 for (int i = 0; i < buff.Count; i++) { bool regexCheck; try { regexCheck = Regex.IsMatch(stTarget, buff[i]); } catch { return true; } if (regexCheck == true) { return true; } }
344 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 04:23:35 ] 質問に来ました。 ●正規表現の使用環境 boost regexを使用した「Flexible Renamer」というファイルリネームソフト ●検索か置換か? 置換 ●説明 [aaaa][bbbb].xxx などとなっているファイル名の最初の[]だけを()に変えたい (aaaa)[bbbb].xxx となるようにしたい ソフトがバグっている可能性もあるのですが、いろいろやったけどできません。
345 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 04:28:04 ] それで質問は?
346 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 07:52:39 ] s/^(.*?)\[(.*?)\](.*)$/\1(\2)\3/ できないのはソフトのバグではない じゃあ何の所為なんだろうね
347 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 11:11:02 ] >>346 d やっぱりできませんでした どうもソフト自体が正規表現を受け付けないみたい、説明にもヘルプにもできるって書いてあるのになー 別のフリーソフト探します
348 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 11:56:11 ] ちょっと触ってみたけど、高度なりネームにチェック入れたか?
349 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 12:11:36 ] 高度なリネームにチェックして、正規表現を選択、 検索:^(.*?)\[(.*?)\](.*)$ 置換:\1(\2)\3 で動作したが。
350 名前:346 mailto:sage [2008/10/24(金) 12:18:31 ] えっ、そこからなの? ソフトの使い方とか予想外だった
351 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 09:42:10 ] HTMLのあるタグの中身が入れ子になっていても確実に外側にマッチできる正規表現ってありませんか? 正規表現だけに頼らず、HTMLをパースするしかないんでしょうか? <div class="1"> あああ <div class="2">いいい</div> </div> ↑この、<div class="2"> があろうとなかろうと、<div class="1"> に対応する</div>までをマッチさせたい
352 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 10:23:24 ] たぶん、正規表現マッチのみだと、荷が重いか無理。 その例みたいに、「divのみで2重まで」とか条件があればまだしも。
353 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 11:17:41 ] HTMLとかXMLとか扱うのなら、たいていのケースでパーズしたほうが簡単。
354 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 13:40:07 ] 世の中のHTMLがまともなHTMLばかりなら それで苦労ないんだけどなw
355 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 01:02:35 ] ネストが狂ってたり閉じタグが無かったりなんてのはザラだからなー
356 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 01:19:07 ] 一つの正規表現では無理だが、ループ作れば何とか。でも、自分では普通かかんよねー。 $match = ''; $str =~ /(<div class="1">)/g or die "no match"; $match .= $1; while ($str =~ m{\G(.*?</div>)}gs) { $match .= $1; last if $1 !~ m/<div/; }
357 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 11:17:52 ] 現在『[\x20-\x7E]』とやって半角文字を抽出してるんですが 半角の空白のみを含まない場合は、どうやって表現したら良いでしょうか お願いします。
358 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 12:25:44 ] >>357 アスキーコード表を眺めてみましょう。
359 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 12:38:16 ] >>358 ありがとうございました『[\x21-\x7E]』でいけました。 ところで、vb2008のRegexクラスでは、^による否定ってできないのでしょうか
360 名前:359 mailto:sage [2008/10/28(火) 13:01:21 ] 使えることがわかりました。自分の記述が悪かったみたいです。ありがとうございました。
361 名前:デフォルトの名無しさん [2008/10/29(水) 18:31:37 ] C#で 数字4桁で後ろに 何もない ハイフンが1個 ハイフンと小文字のアルファベットa-z の3パターンにマッチするには、どう書けばいいのでしょうか 例 1234 2345- 7896-d
362 名前:デフォルトの名無しさん mailto:sage [0-9]{4}(-[a-z]?)? [2008/10/29(水) 19:21:52 ] >>361 >>2 あたりは一通り読んだのか?
363 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 21:45:54 ] 優しさに泣いた
364 名前:デフォルトの名無しさん [2008/10/30(木) 01:04:02 ] 環境)OS:WinXP-Pro,Mem=3GB,開発ソフト:FlashCS3-Pro(Player9.0,AS3.0) Flash-ActionScript 3.0で正規表現を用いて、テキスト中の 1.2345 -0.1234 10.5678 といった数値を抽出しようと思いますが、この場合の小数点の扱いはどのようになるのでしょうか? テストで .[0-9] (小数点とその右の数値を抽出)を行ったところ、e1 というコードが現れ、 全く出鱈目な結果を得ました。 (ActionScript3.0で「.」は任意の1文字なので仕方ないのですが・・・) Flashの場合に限らず、小数点を含む類似のサンプルがありましたらご紹介下さい。
365 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 01:07:55 ] OSとメモリに和んだ 任意の一文字を表す . を \ でエスケープすれば . そのものになると思うよ
366 名前:364 mailto:sage [2008/10/30(木) 01:31:46 ] >>365 早速のレス有難うございます。 たった今、手元の本で見つけたのですが、 . はAsciiコードで \x2E と表現するということなので、 これで試しましたが駄目でした(Unicode表記 \u002E でも駄目でした) 半角マイナス(\x2D)やスラッシュ(\x2F)は問題なく抽出できたのですが・・・
367 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 02:06:44 ] 正規表現オブジェクトをどうやって作ったのか そのオブジェクトとどうやってマッチさせたのかわかるコードを貼ってみて もし前者で new RegExp("\x2E[0-9]") とかしてるとややこしいことになる 正規表現リテラル /\x2E[0-9]/ や /\.\d/ なら期待通りに動くはず
368 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 02:54:50 ] [.][0-9] なんて手もある。 一文字多いけど、 \ の扱いが面倒な状況だと役に立つかも。
369 名前:364 mailto:sage [2008/10/30(木) 22:42:15 ] >>367-368 試してみました。コードの構成は以下の通りで、マウスクリックでのアクションです。 var str:String = "+ +-- ** / / 0120-123-456 1.2345 -0.1234 10.5678 0.0012"; //適当な文字列 this.expBtnM0.buttonMode = true;// マウスポインタを指の形に this.expBtnM0.addEventListener (MouseEvent.CLICK, mcClick0); // 5個のムービークリップ expBtnM0〜expBtnM4 を押して動作 function mcClick0 (event:MouseEvent):void { var pattern:RegExp = /\x2E[0-9]/g; // <----- ここを5種類で試す var regObj:Object = pattern.exec(str); trace ("0 マッチング: " + regObj); // 0 マッチング: 〜 4 マッチング: trace ("0 文字列: " + str.match(pattern)); // 0 文字列: 〜 4 文字列: trace (""); } 結果は、 var pattern:RegExp = /\x2E[0-9]/g; , var pattern:RegExp = /\.\d/g; , var pattern = new RegExp("[.][0-9]", "g"); および var pattern:RegExp = /[.][0-9]/g; の4つで可でしたが、 var pattern = new RegExp("\.\d", "g"); ではod が返されて不可でした(odの意味を調べましたが、 分かりませんでした)。 取りあえず、少数点(ドット)には var pattern:RegExp = /〜/; の形が良いようです。 アドバイス、有難うございました。
370 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 01:02:32 ] 今北 最後のやつはダブルクォート中のエスケープだから実態は“.d”で 任意の1文字+dで解釈されたと思われる それをするなら“\\.\\d”だろうか どうも「\でエスケープ」の意図が伝わってなかった気がするね できたんならよしとすればいいけど
371 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 06:50:23 ] だね。ややこしいところではある // ASコンパイラは文字列「ドット、次に d 」と解釈 "\.\d" // 正規表現コンパイラは文字列「ドット、次に d 」を元に正規表現を作成 // 結果、任意の一文字に続いてdが来る文字列にマッチする正規表現が出来上がる new RegExp("\.\d", "g"); こういうのにはまったら、ASコンパイラと正規表現コンパイラの二者が (概念的には)存在することを思い出すといいんじゃないかと思う もちろん、とりあえず正規表現リテラル /.../ 使っとこう、でも構わない あと >>369 のコード中の str に文字列 od が含まれていないか確認を
372 名前:364 mailto:sage [2008/11/01(土) 11:41:13 ] >>371 すいません、レス遅くなりました。 ここに貼った var str:String は元が長いので、途中を省略したもので、コード上の元の 文字列には確かに od が入っています。 AS3.0の new RegExp("\.\d", "g"); だと、od(〜d) が対象になるのかなあ・・・・
373 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 18:48:42 ] ●正規表現の使用環境 PHP4.3.11 ●検索か置換か? 検索 ●説明 CSVファイルを「,」で分離したいが、 「"」で囲まれているフィールドに関しては「,」で分離したくない ●対象データ AB,BC,"CD,DE,EF",FG ●希望する結果 (1)AB (2)BC (3)"CD,DE,EF" (4)FG すいません、基礎的な質問かと思いますが お分かりになる方がいらしたらよろしくお願いいたします。
374 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 19:47:44 ] CSVの分割は正規表現では完璧に表現できない プログラムで対処が一般的
375 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:01:42 ] >>373 PHPなら専用の関数が元からあるだろう?
376 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:31:19 ] ●正規表現の使用環境 Ruby1.8 ●検索か置換か? 置換 ●説明 ファイル名の頭から指定の文字列Xまでをなくす ●対象データ 例)指定の文字列X → "test" ドラゴンボールtestあいうえお.txt あああいいいtest.txt ●希望する結果 testあいうえお.txt test.txt
377 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:35:30 ] "aaaiiitest.txt".sub(/.*?test/, "test") "aaaiiitest.txt".slice(/test.*/)
378 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 21:40:12 ] テラ早い回答ありがとうございました
379 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 09:49:48 ] ●正規表現の使用環境 Perl v5.8.8 ●検索か置換か? 検索 ●説明 F1という文字列が含まれていたらヒットさせたい ただしF1の前にFが付いている場合はヒットさせたくない ●希望する動作 "F1 ほげほげ" →真 "FF11 ほげほげ" →偽 [^F]F1 [^F]?F1 などと試して見ましたが失敗でした
380 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 10:11:16 ] 自己解決 これでうまくいきました ^F1|[^F]F1
381 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 14:32:31 ] 否定戻り読みとか使うのもいいだろう。 (?<!F)F1
382 名前:デフォルトの名無しさん [2008/11/08(土) 14:36:05 ] CodeZineの記事オススメだなテンプレにいれとこうぜ codezine.jp/article/detail/3039 codezine.jp/article/detail/2676
383 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 06:56:57 ] >>381 それは否定先読み
384 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 07:01:53 ] これ間違ってる? (?<=aaa)bbb 直前にaaaがくるbbbにマッチ(先読み)。 (?<!aaa)bbb 直前にaaaがこないbbbにマッチ(否定先読み)。 aaa(?=bbb) 直後にbbbがくるaaaにマッチ(戻り読み)。 aaa(?!bbb) 直後にbbbがこないaaaにマッチ(否定戻り読み)。
385 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 07:04:38 ] >>383 は無かったことにしてくれ
386 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 09:18:59 ] ●正規表現の使用環境 lex ●検索か置換か? 検索 ? ●説明 C言語のコメントで使われるような書式の検索 /*で始まり*/で終わるような文 ただし途中で*/は出現しない 漢字コードはEUCです。 コメントが英数字だけならできそうなのですが 漢字などが入ってくるとよくわかりません。 よろしくお願いします。
387 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 10:47:44 ] EUCなら、漢字がバラになっても英数字とコードが重複しないから 問題ないのでは?
388 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 11:20:03 ] >>387 できれば正規表現を教えてもらえないでしょうか? 英数字は[a-zA-Z0-9]のようにできると思いますが ひらがなやカタカナは[あ-んア-ン]のようにはやはりできませんよね? 文字コードで書くのでしょうか。。。。
389 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 11:21:52 ] >>388 この場合、正規表現にひらがなやカタカナを書く必要ないでしょう?
390 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 11:40:01 ] >>389 コメント/**/の中にひらがなやカタカナ、漢字、英数字がでて来ると思うのですが 必要ないのでしょうか? 例として 「/*(A|***B)*/」 Aは「*、/」以外の文字を表しBは「/」以外の文字を表す。 演算の*と混乱をさけるためアスタリスクは全角大文字にしているが 実際は半角にする。 このAとBを表したいのですが。。。。 例えば[0-9a-zA-z(漢字コード?)^/*(/と*を除く)]のようにすればいいのでしょうか?
391 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 12:15:38 ] 後出しで条件つけるなよ・・・
392 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 13:04:37 ] >>390 目的は、コメント中の「*」を「*」にすること?
393 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 13:19:29 ] >>391 すみません、質問の仕方が悪かったです; >>392 いえ、「/*(A|***B)*/」の「*」は本当は「/*(A|xx*B)*/」 とかけてC言語ではかけるの「x」は「*」で、 正規表現の0回以上繰り返す「*」とかぶってしまうため 「/*(A|***B)*/」とかかないで「/*(A|***B)*/」と書いていると思います。 何がしたいのかはlexを使って字句解析をしたいのですが コメントの部分をスルーするための正規表現の仕方がしりたいのです。
394 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 13:25:36 ] 字句解析するなら /* と */ だけ検知して 途中は読み飛ばせばいいような気がするんだけど、そうじゃないの?