タグ

正規表現に関するkamatama_41のブックマーク (8)

  • 正規表現:悪い表現、いい表現、最良の表現 | POSTD

    わずかな文字がいかにしてパフォーマンスに大きな違いを生めるかというお話 正規表現は、私たち開発者がことあるごとに駆使する呪文のようなものですが、私たちはそれをどんな時も巧みに使いこなしていると言えるでしょうか。正規表現は繊細で精密な言語です。入念な慎重さで記述してやれば、ボウリングで一瞬にして完璧なストライクを取るような強力なテキストとなり得ます。 しかし、正規表現が精密さに欠ける状態で投げ出されると、さながら酔っ払いがよろよろとつまずきながらテキストの上を歩くがごとく、そのボールはぎこちなくボウリングのレーンを転がり、ピンを1つか2つ倒すだけで終わってしまうのです。 これら2つの正規表現の違いは何なのか。何がいい表現と悪い表現を分けるのか。正規表現に素晴らしい力を与えるメカニズムを、この投稿で明かしてみようと思います。効果的な表現とそうでない表現との大きな違いをきっと分かってもらえるはず

    正規表現:悪い表現、いい表現、最良の表現 | POSTD
  • 遅いッ!遅すぎるッ!Java の正規表現のお話。 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは、ミドルウェア開発チームの青木です。 先日、アプリケーションサーバーが応答を返さなくなるトラブルに遭遇しました。 今回はその時のトラブルの原因と対策の顛末についてお話しようと思います。 現象 アプリケーションサーバーが突如応答を返さなくなりました。 現象が発生したアプリケーションサーバーのスタックトレースを見ると、あるスレッドの先頭が上記のようになっていました。 "qtp258153142-514386" prio=10 tid=0x00007f40b8dbf000 nid=0x7b4e runnable [0x00007f415ccb0000] java.lang.Thread.State: RUNNABLE at java.util.regex.Pattern$Loop.match(Pattern.java:4692) at java.util.regex.Pattern$G

    遅いッ!遅すぎるッ!Java の正規表現のお話。 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • Java 7 時代の String#split() 事情

    Java 7 になって String#split() の実装が変更されたことに今更ながら気付いたので、Pattern#split() や Java 6 との性能の比較をしてみたメモです。 Java 6 以前の文字列分割処理 古くから Java を触っているエンジニアであればみな当然知っていることだと思いますが、 TSV ファイルを Java のプログラムで読み込んで処理をするときなど、特定のデリミタで区切られた文字列を個々の要素に分割するときは String#split() を利用せず、事前にデリミタに対する java.util.regex.Pattern オブジェクトを生成しておき、そのオブジェクトを使い回す形で Pattern#split() を利用した方が処理効率 (処理時間) がよくなります。 これは、 String#split() の実装が実質的に Pattern.compile

    Java 7 時代の String#split() 事情
    kamatama_41
    kamatama_41 2013/05/20
    そうだったのか
  • 『[Java] 正規表現によるパターンマッチング』

    よく使うわりに、よく使い方を忘れるのでメモしておきます。 正規表現によるパターンマッチングを行うには、java.util.regex パッケージの Pattern クラスと Matcher クラスを利用します。 Pattern クラスは正規表現パターンを表すクラス、Matcher クラスはマッチングを行うクラスで、それぞれ、以下のように準備します。 String value = "This is a pen."; String pattern = "\\w+"; Pattern p = Pattern.compile(value); Matcher m = p.matcher(pattern); 最終的に使用したいのは Matcher クラスなので、以下のようにしてもいいかもしれません。 Matcher m = Pattern.compile(pattern).matcher(value)

    『[Java] 正規表現によるパターンマッチング』
  • Javaの道:文字列(7.正規表現)

    正規表現とは文字・記号を利用し、特定の文字パターンを表現することを言います。文字列が文字パターンに合致するかを確認する場合や、 文字列内の文字パターンに合致する部分を変更したりする場合に利用します。 正規表現例1 正規表現内の*は直前の文字が0回以上続くことを表します。a*bはaabやaaaaaabの文字パターンを表します。 正規表現例2 正規表現内の[ ]は[ ]内の任意の1文字が含まれることを表します。a[xyz]aはaxaやayaの文字パターンを表します。 正規表現の詳細はjava.util.regexパッケージのJava APIドキュメントをご参照ください。 java.util.regexパッケージはPatternクラス、Matcherクラスで構成されています。 Patternクラスでは正規表現をコンパイルし、正規表現処理を行うMatcherクラスのオブジェクトを生成します。 Ma

    Javaの道:文字列(7.正規表現)
  • Groovyの文字列検索メソッド(eachMatch)の結果取得 - 日々常々

    GWだからGroovyの勉強してます! 音は 第6回「Groovyイン・アクション読書会」IN 関西 に参加申込してしまったので慌てて勉強してるだけだったりします。 発端 Groovyイン・アクションの写経をしていたら assert 通らないのがあったんです。 Groovyイン・アクション70ページのstring.eachMatchのassertが通らないのは、が間違ってるのか、写経間違えてるか、バージョンの違いか()無しだとmatchがStringになってんだよなー。かといって適当に()つけても変な挙動するし。 2011-05-05 18:33:38 via Echofon myFairStringy = 'The rain in Spain stays mainly in the plain!' BOUNDS= /\b/ rhyme = /$BOUNDS\w*ain$BOUNDS/

  • 正規表現で楽々コード置換 - give IT a try

    会社で紹介した正規表現の入門的なテクニックをこっちにも載せておきます。 まずは例題から ちょっと訳あって、これまで型付けDataTableを使って書いていたロジックを、型無しのプレーンなDataTableに書き換える必要が出てきました。 イメージ的にはこんな感じです(もちろん説明のためにかなり簡略化しています)。 // 変更前 BookShopDataSet.BookTable table = FindBooks(); BookShopDataSet.BookTableRow row = table[0]; Assert.AreEqual("詳説 正規表現", row.Title); Assert.AreEqual("ジェフリ− E.F.フリ−ドル", row.Author); Assert.AreEqual("オライリージャパン", row.Publisher); // 他にもたくさんの

    正規表現で楽々コード置換 - give IT a try
    kamatama_41
    kamatama_41 2011/08/05
    正規表現も一回しっかり勉強しないとですね。
  • この機会にマスターしようぜ、正規表現、構文図、オートマトン - 檜山正幸のキマイラ飼育記 (はてなBlog)

    正規表現と構文図について解説します。オートマトンについても詳しく述べます。オートマトン・スゴロクで遊びましょう! 世間でよく知られている/使われている概念・方法にはこだわらず、僕(檜山)の感覚で一番わかりやすいと思われる筋書きと用語法/図式法を使って説明します。この記事に目を通して“感じ”が掴めたら、形式言語理論の教科書を読み始めることが出来るでしょう。 [追記]この記事の内容に対する具体例は、「正規表現とオートマトン:なんだ簡単じゃん、JavaScriptによる実装」にあります。[/追記] 内容: 正規表現 正規表現の例 構文図 基記号 連接 選択 省略可能 繰り返し ストレートワイヤーによるレイアウト調整 有限状態オートマトン 有限状態オートマトンの実行 バックトラックと先読み スゴロクとオートマトン コマをたくさん使うスゴロクと並列処理 非決定性オートマトンと決定性オートマトン 正

    この機会にマスターしようぜ、正規表現、構文図、オートマトン - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 1