タグ

regexpに関するtyruのブックマーク (51)

  • 正規表現でのメールアドレスチェックは見直すべき – ReDoS

    (Last Updated On: 2018年8月13日)前のエントリでStackExchangeがReDoSで攻撃されサイトがダウンした問題を紹介しました。少しだけ掘り下げて見たところ、正規表現だけでメールアドレスをチェックしている場合、壊滅的なReDoS(十分短い文字列で指数関数的に実行時間が増加する)が可能なことが判りました。 結論を書くと、正規表現でのメールアドレスチェックは見直すべき、です。(特にRubyユーザー) 追記:影響範囲はメールアドレスチェックに限らないので、正規表現チェックは全体的に見直さないと、どこが脆弱なのか判りません。見直してチェックしたとしても、それが完全であったと保証することは困難です。ネット検索して直ぐに見つかった検索パターンは非常に脆弱であったこと、メールアドレスのマッチパターンは脆弱になりやすい繰り返しの繰り返しが含まれること、これらがあったのでタイト

    正規表現でのメールアドレスチェックは見直すべき – ReDoS
  • V8 JavaScript Engine: Speeding up V8 Regular Expressions

    Show navigation This blog post covers V8’s recent migration of RegExp’s built-in functions from a self-hosted JavaScript implementation to one that hooks straight into our new code generation architecture based on TurboFan. V8’s RegExp implementation is built on top of Irregexp, which is widely considered to be one of the fastest RegExp engines. While the engine itself encapsulates the low-level l

    tyru
    tyru 2017/01/13
    "Historically, various components of V8 have been implemented in JavaScript. Until recently, regexp.js has been one of them" / "Posted by Jakob Gruber, Regular Software Engineer"
  • Weighted RegExp Matching

  • 関数型的正規表現マッチ - Preferred Networks Research & Development

    最近ローソンでお菓子をたくさん買った田中です。 近頃読んで面白かった論文を紹介したいと思います。 A Play on Regular Expression 今年のICFPでFunctional Pearlとして発表されたものです。ICFP(International Conference on Functional Programming)というのは、関数プログラミングに関する国際学会で、Functional Pearlというのは、エレガントでためになる、関数プログラミングのテクニック集です。 この論文ではまず、正規表現マッチャを関数型言語(Haskell)でいかにエレガントに記述できるかが示されます。それから、エレガントさを保ったままの線形時間実装へ改良し、その実装がC++によるプロフェッショナルな実装(具体的にはGoogle re2)に匹敵するパフォーマンスを示すことが示されます。さら

    関数型的正規表現マッチ - Preferred Networks Research & Development
    tyru
    tyru 2017/01/04
    A Play on Regular Expression
  • A Play on Regular Expressions読んだ - プログラムモグモグ

    A Play on Regular Expressions 最後まで読みました. 対話的に書かれていて読みやすかったのと, ソースコードがほとんどそのまんま動いたため楽しかったです. 正直言って, 正規表現のエンジン書いたのは初めてでした. この論文の素晴らしい所は, そんなぼくでも, ACT1を読むだけで, 取り敢えずなんか動くエンジンが作れてしまうことですね. ただ, 指数関数的にメモリーをうからがんばろうって言ってACT2に続くわけですが... ACT2からもすごく良かった. Semiringを使って正規表現の返す値を一般化する方法は, とても美しく, 気持よかったです. そして, 最終章のLazinessにきた時, 興奮が収まりませんでした. 少しコード貼っておきます. 最初に出てくる, 正規表現を表すデータ型はこんな感じです. data Reg = Eps | Sym Char

    A Play on Regular Expressions読んだ - プログラムモグモグ
    tyru
    tyru 2017/01/04
    {a{n}b{n} | n >= 0} を扱う正規表現が作れる。今の自分には謎技術だ…
  • 正規表現とオートマトン:JSONオブジェクトの妥当性検証 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    正規表現とオートマトンを取り上げ始めたキッカケは、Catyの型システムに正規表現型(regular expression type)を導入しよう、って話です。配列の項目パターンを正規表現で書きたいということですね。正規表現といえば、そりゃまーオートマトンでしょ。 配列以外の型には、オートマトンを使わない検証方式を使い続けることもできます。ですが、どうせやるなら、どんな型も一律にオートマトンで処理したほうがスッキリするでしょう。そこで、オートマトンを使ってJSONオブジェクト型の妥当性検証をする方法を紹介します。 内容: 準備:JSONオブジェクトのリストっぽい解釈 有向グラフと状態遷移 基的な型に対応するオートマトン 簡単な例 JSONオブジェクト型に対応するオートマトン 複雑な例 準備:JSONオブジェクトのリストっぽい解釈 オートマトンは、文字列、リスト、ストリームのようなシーケンス

    正規表現とオートマトン:JSONオブジェクトの妥当性検証 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    tyru
    tyru 2017/01/04
  • 鬼雲に非包含オペレータを実装した話 - Qiita

    概要 田中哲さん(@tanaka_akr)が以前提案された「非包含オペレータ」というものを(実験的に)鬼雲に実装しました。これを使うと例えば C 言語のコメントにマッチする正規表現などが簡単に書けるようになります。 ここでは、非包含オペレータとは何か、また今後の見通しなどについて説明します。 非包含オペレータとは? 非包含オペレータは田中さんが約 9 年前に発表された、正規表現の拡張です。理論的背景と実装例は以下のスライドと論文に示されています。 正規表現における非包含オペレータの提案 Absent Operator for Regular Expression 従来の正規表現では、「特定の文字以外の 1 文字にマッチする正規表現」は文字クラスの否定を使って [^x] のように書くことができますが、それに対して「特定の文字列を含まない文字列にマッチする正規表現」は簡単に書くことはできません

    鬼雲に非包含オペレータを実装した話 - Qiita
    tyru
    tyru 2017/01/04
  • 正規表現入門 星の高さを求めて

    第13回日情報オリンピック(JOI2013/2014)春季トレーニング合宿での講義資料です. http://www.ioi-jp.org/camp/2014/2014-sp_camp-rules.html 【概要】 正規表現とはパターンマッチングのための記法であり,文字列検索の便利な道具として広く親しまれています.この講義では,正規表現の基礎から始め,「星の高さ」という性質に注目して正規表現の裏側に潜む数理構造に迫っていきます.1960年代から未解決である「星の高さ問題」に浪漫を感じてもらえると幸いです.Read less

    正規表現入門 星の高さを求めて
    tyru
    tyru 2017/01/03
  • VM型の正規表現エンジンを実装する - Qiita

    背景 プログラム言語Mokkosuには正規表現のライブラリが存在しない。最近正規表現技術入門というを読み、正規表現の実装について触れる機会があったので、試しに最小の正規表現エンジンを作ってみることにした。また最近Scalaを勉強中なので、Scalaのコードも併記することにした。 二つの実装 正規表現技術入門によると、正規表現のエンジンは大きく分けて次の二種類に分類される。 DFA型 VM型 DFA型とは、正規表現を等価なDFA(決定性オートマトン)に変換してマッチングを行う手法である。また、VM型は正規表現をバイトコードへ変換し、そのバイトコードを実行するVM(バーチャルマシン)にてマッチングを行う手法である。 正規表現をDFAへ変換してマッチングするプログラムは以前書いたことがあったので、今回はVM型で実装を行うことにした。 正規表現のデータ構造 正規表現を一般的なメタ文字列を含むテキ

    VM型の正規表現エンジンを実装する - Qiita
    tyru
    tyru 2017/01/03
  • 正規表現技術入門を読んだ | κeenのHappy Hacκing Blog

    κeenです。正規表現技術入門という書評が望まれているようなので今日買ってきて読みました。 私のバックグラウンドと目的 バックグラウンドは RubyとUnixの正規表現はそこそこ使ってる ドラゴンブックは読んだことある RE2の概略も知ってる VMベースの言語処理系のコミッタなのでVMへの理解もある Standard MLの正規表現エンジンを開発中。機能はほぼ揃ってる な感じです。で、実装中の正規表現エンジンがこので紹介されてるVM型でもDFA型でもなくVM型の素朴な形、ASTのインタプリタで 実装されてるので インタプリタのまま追加出来る機能はないか 高速化を目指すならVM化とDFA化どちらがいいか (既存のSMLの正規表現エンジンではVMバックエンドやDFAバックエンドでグルーピングが使えないので)高速な手法でのグルーピングの実装方法が知りたい 後方参照の実装方法が知りたい など

    正規表現技術入門を読んだ | κeenのHappy Hacκing Blog
  • 正規表現エンジンを作ろう一覧

    CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

    正規表現エンジンを作ろう一覧
    tyru
    tyru 2017/01/03
  • 正規表現で素数判定 - NO!と言えるようになりたい

    追記:ハッキリ言ってこの正規表現はネタなので,実際に素数判定を行いたい場合は,もっと別な賢いアルゴリズムを使ったほうが良いです 正規表現で素数が判定できるという記事を見たので試してみた. http://www.noulakaz.net/weblog/2007/03/18/a-regular-expression-to-check-for-prime-numbers/ この記事によると /^1?$|^(11+?)\1+$/ という正規表現を使うと,素数判定が出来るらしい.ある整数 n が素数かどうか判定したい場合は,"1" * nという文字列がこの正規表現にマッチするかどうかを調べればよく,マッチすれば非素数,マッチしなければ素数となる.ただし,"1" * n は,例えば,n が 4 ならば "1111" と 1 が 4 回連続して続く文字列となる. Rubyで書いた素数判定プログラムはこん

    正規表現で素数判定 - NO!と言えるようになりたい
    tyru
    tyru 2017/01/02
    今更分かった…そういうことだったのか… / id:Haaaa_N \N は再帰ではないです。再帰は (?N) ですね。 http://ngyuki.hatenablog.com/entry/2015/09/23/203737
  • golang で正規表現クロスワードを解く - Qiita

    この記事は Go Advent Calendar 2016 最終日の記事になります。参加頂いた皆さんお疲れさまでした。 今年も昨年に引き続き、25人以上の方が「何か書きたい」と名乗り出て頂き、gogo2、go3 の3(2年連続)、計75エントリが揃う事になりそうです。Go 言語の人気が高まってきているのが良くわかるアドベントカレンダーでした。 あらすじ 普段あまり表だった所には姿を現さないのですが、今年は builderscon 2016 に登壇させて頂きました。 とても新鮮な体験で、味わった事のない緊張の中、いろいろな反響を貰いました。いい体験が出来たと思います。ありがとうございました。登壇し終えて数時間はなんだか緊張のほぐれた変な感じを味わっていました。懇親会の時あたりでようやく皆さんとお話する事ができて Vimmer の皆さんと Vim 談義をしてきました。 その懇親会で香り屋さ

    golang で正規表現クロスワードを解く - Qiita
  • situs informasi perjudian online

    situs informasi perjudian online informasi perjudian online yang memberikan rifrensi atau wawasan dalam bermain The term 여성알바 구인구직 shiftwork applies to any timetable that falls beyond the long periods of 7:00 a.m. to 6:00 p.m. As per the U.S. Department of Work Measurements, around 16% of salaried and blue collar laborers are on a shift plan. While certain representatives like pulling all nighters

  • 正規表現を複数回実行する際の注意点 - Qiita

    javascriptで正規表現を複数回実行する際の注意点 以下のコードは"hoge"という文字列が含まれているか正規表現で検索し、結果を表示するコードです。 var example = "hoge"; var regexp = /hoge/g; regexp.test(example); // true regexp.test(example); // false regexp.test(example); // true regexp.test(example); // false ... 一度目の実行ではtrueが返ってきますが、二度目の実行ではfalseが返ってきます。 以降は交互に結果が変わります。不思議ですね。 私はループ内で正規表現を実行する際に、この挙動につまづきました。 一体何が起きているのでしょうか? var examples = ["hoge", "hoge", "ho

    正規表現を複数回実行する際の注意点 - Qiita
  • UniViewSVG 16β

    Tables and lists appear here. To get started, either: select a Unicode block or character range using the controls above, add characters, code points or text to the Search field and click on one of Hex, Dec, Characters or Text, or paste some text into the text area and hit the button to list the characters. Clicking/tapping on characters in a table or list displays detailed information for them in

    tyru
    tyru 2016/03/05
    正規表現(に限らないけど)Unicode文字プロパティの一覧とか表示してくれる (via http://techracho.bpsinc.jp/hachi8833/2013_09_13/13433 )
  • 正規表現を使ったDoS – ReDoS

    (Last Updated On: 2018年8月8日)いつかは忘れるくらい前に正規表現のアルゴリズム自体を利用してDoS攻撃を行うReDoSが発表されていました。今まであまり気にしていなかったのですが、検索しても日語のページが出てこないようでした。詳しく知るためのリンクなどを紹介します。 少し検索して出て来た日語ページはHPのページでしたが、たまたまインデックスされていたページがヒットしたようでした。また記載されている情報は不十分でした。(ページ下のコピーライトからFortifyの情報のようです) 日語のページで良いものは無いようなので、ReDoSの英語ページ/PDFを紹介します。 Wikipedia OWASP CHECKMARX  2015 (PDF) CHECKMARX 2009 (PDF) 3つ目のCHECKMARXのPDFは解りやすいと思います。OWASPのページはCHE

    正規表現を使ったDoS – ReDoS
  • 正規表現(肯定先読み、否定先読み、肯定戻り読み、否定戻り読み) - satosystemsの日記

    自分のためにメモ。 (肯定|否定)(先読み|戻り読み)、覚えづらい。 正規表現 パターン(boost::regex) 説明 肯定先読み (?=regex) regex に一致する文字列が始まる位置にある検索文字列と一致する。一致した文字列は記憶されず、後で使用することはできない。 たとえば "Windows (?=95|98|NT|2000)" は、"Windows 2000" の "Windows" には一致するが、"Windows 3.1" の "Windows" には一致しない。 先読み処理では、読み進まれた文字は処理済みとは見なされない。一致の検出後、次の検索処理は先読みされた文字列の後からではなく、一致文字列のすぐ後から開始される。 否定先読み (?!regex) regex に一致しない文字列が始まる位置にある検索文字列と一致する。一致した文字列は記憶されず、後で使用することは

    正規表現(肯定先読み、否定先読み、肯定戻り読み、否定戻り読み) - satosystemsの日記
    tyru
    tyru 2014/07/22
    なるほど。「後読み」よりも「戻り読み」のが覚えやすいな。/何回調べたかわからん
  • Atom Flight Manual

    CompanyEngineeringProductSunsetting AtomWe are archiving Atom and all projects under the Atom organization for an official sunset on December 15, 2022. January 30, 2023 Update: Update to the previous version of Atom before February 2 On December 7, 2022, GitHub detected unauthorized access to a set of repositories used in the planning and development of Atom. After a thorough investigation, we hav

    Atom Flight Manual
    tyru
    tyru 2014/07/05
  • sedlisp.sed 00:54 - 2014-06-08 - 兼雑記

    https://github.com/shinh/sedlisp Lisp インタプリタを書きました。 sed で。 https://github.com/shinh/sedlisp/blob/master/sedlisp.sed README に書いた通り、それなりにややこしいプログラムも動く気がします。具体的には eval.l として、 eval の無いところで eval を実装しました。で、その上で FizzBuzz なんかが動きます。これはつまり S 式のパースは省略した Lisp のインタプリタと言って良いので、 sed で書かれた Lisp の上で Lisp が動いて、その上で FizzBuzz が動いてることになります。ちなみにもう一段かますことはできませんでした。 Ruby で書いた実装でも動かないので、 eval.l がとりあえず循環できない作りになってしまってるみたいで

    sedlisp.sed 00:54 - 2014-06-08 - 兼雑記
    tyru
    tyru 2014/06/08
    "Lisp インタプリタを書きました。 sed で。"