タグ

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

  • 20日目: 正規表現が ReDoS 脆弱になる 3 つの経験則

    はじめに 皆さんこんにちは.3回生のらん(@hoshina350)です. 文字列マッチングに便利な正規表現ですが,テキトーに書くと脆弱になり得るという情報を耳にしてから色々と原因や対策を調べていました. しかし,多くの記事で紹介されていた対策方法は,「独自の正規表現を使用しないー」とか「 * や + などの繰り返し表現はなるべく使わないー」とかいう なんともふわっとしたものでした.これでは「いやぁ確かにそうなんかもしれんけど…そうゆう訳にはいかんやんか…」と納得できません. つまり,「質的に何が問題」で,「具体的にどんな特徴のある正規表現が脆弱になり得るのか」を知りたい訳です. そこで,様々な文献を調査してみました.記事では調査して溜まった知見を紹介していきます. 記事は, Purdue大学のJames Davis教授による “The Regular Expression Denia

    20日目: 正規表現が ReDoS 脆弱になる 3 つの経験則
  • 40行以内で正規表現エンジンを構築 | POSTD

    最終目標は、最小限のコードで正規表現ユースケースの大部分をカバーできるくらい十分堅牢な構文を提供することです。 1文字と一致させる まずはじめに、1文字のパターンと1文字で構成される文字列を引数に取り、一致するかしないかを示すブール値を返す関数を作成してみます。1文字のパターンである . はワイルドカードとされ、任意の文字リテラルと一致します。 下記のようなかんじです matchOne('a', 'a') -> true matchOne('.', 'z') -> true matchOne('', 'h') -> true matchOne('a', 'b') -> false matchOne('p', '') -> false function matchOne(pattern, text) { if (!pattern) return true // 任意テキストが空パターンと一致

    40行以内で正規表現エンジンを構築 | POSTD
    kenichiice
    kenichiice 2017/12/22
    70行に増えてる
  • メールアドレスを表す現実的な正規表現 - Qiita

    RFC5322で定義されているメールアドレスの書式を完全にサポートすることは簡単ではありませんが、適当な正規表現を紹介してOKとする記事があとを絶ちません。 HTML5には input[type=email] という要素があり、メールアドレスの書式チェックをクライアントサイドで行えるようになっています。このチェックでは、下記の(Perl5の記法にならった)正規表現を使っています。 /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/ 注釈に この要件は電子メールの構文を定義するRFC5322に対して 意図的に違反 (willful violation) している。 とあるように、仕様を完全に満足する正規表現ではありませんので、電子メールヘッダを解析するような格的な用途に対しては不十分ですが、WEBサ

    メールアドレスを表す現実的な正規表現 - Qiita
    kenichiice
    kenichiice 2014/02/20
    「HTML5には input[type=email] という要素があり、メールアドレスの書式チェックをクライアントサイドで行えるようになっています。」
  • [JavaScript] 正規表現を使ったCSVパーサ / LiosK-free Blog

    2008-01-25 カテゴリ: Client Side タグ: Tips JavaScript RFC CSV パーサ 正規表現 ちょっとした理由から、CSVファイルをJavaScriptで読み込むためのパーサを書きたいと思って、先ほどからがんばってみた。 CSVはいろいろな実装があって正式な仕様がなかなかないらしいけど、考えるのが面倒なのと、Excelが吐くCSVを一応処理できるという理由から、Wikipediaで紹介されていたRFC 4180の形式を採用することに決定。 パーサとかレキサみたいなのは書いたことがないからいびつな仕上がりかも。 仕様 RFC 4180の仕様はだいたい↓のような感じ。 fileは改行(CRLF)で区切られた一つ以上のrecordで構成される recordはコンマ(,)で区切られた一つ以上のfieldで構成される fieldにはescaped、または、non

  • 正規表現しちへんげ! 第二夜

    09:25 10/12/31 年末まとめ 今年何やったっけ、と日記を読み返していました。何もやってないな…。 Polemy 作りました、くらい。 言語処理系作るのはやっぱり楽しいですね。 汎用言語として使う格的なものを作ろうとすると懲りすぎて一歩も進まなくなってしまう自分が見えるので、 来年は、そうだなあ、TopCoder/ICPC風コンテストに特化した言語というかC++へのトランスレータ、 くらいに絞って作ってみようかなあ。 書いた記事だと 最短性チェックの話 が自分では割と気に入っています。 これのもっとバグを許容するバージョン作れないか。 読んだ論文で面白かったのは "A Pearl on SAT Solving in Prolog" と "When Simulation Meets Antichains" (PDF) など。 あとは、今年読んで面白かったベスト5(順不同): 『

    kenichiice
    kenichiice 2011/04/01
    「正規表現しちへんげ! まとめ」
  • 第6回 Ruby M17N 事始め:正規表現編 | gihyo.jp

    はじめに 今回は、今話題の正規表現について、その歴史と限界、そして限界を越えた先までを解説します。なお、るりまやるびまの記事もあわせて読んでみてください。 正規表現とは さて、正規表現はもともと1940年代に神経生理学者によって生まれ[1]⁠、数学者[2]や言語学者、情報工学者たちによって理論的背景が研究されてきました。これを最初にコンピュータで用いたのがKen Thompsonによるqed[3]で、それ以降正規表現はテキスト処理に欠かせないツールとして愛されてきました[4]⁠。 基的な演算 正規表現では、量化・連結・選言という3つの演算を用いて、目当ての文字列群だけを識別する規則を記述します[5]⁠。 量化: 語を繰り返す。一般に用いられる演算子*から、スター演算とも言う。結合則は強い。 連接: 語と語をつなぐ。 選言: ある語か別の語かのどちらか。結合則は弱い。 演算子 Rubyでは

    第6回 Ruby M17N 事始め:正規表現編 | gihyo.jp
    kenichiice
    kenichiice 2010/04/07
    「Ruby 1.9では鬼車を取り込んだことによって大幅に機能強化がなされました。これらの機能を使いこなせれば,きっと正規表現の新たな地平線を見ることができるでしょう」
  • 米Google、高速・低メモリ消費の正規表現ライブラリ「RE2」を公開 | OSDN Magazine

    Googleは3月11日、正規表現ライブラリ「RE2」を発表した。動作が高速で「スレッドフレンドリー」な点が特徴。従来のバックトラック型正規表現ライブラリの代替として開発を進めていく。 Googleによると、同社はCode SearchやSawzallといったインフラやアプリケーションで正規表現を利用しているが、バックトラックアルゴリズムを利用した従来の正規表現実装では入力データに対し処理時間が指数的に増加することが問題となっていた。また、固定サイズのスタックを持つC++のマルチスレッドプログラムの場合、従来の正規表現実装ではスタックを使い切ってスタックオーバーフローを発生させることがあったという。これらを解決するために独自の正規表現エンジンを開発したとのこと。 RE2はどのような入力や正規表現に対しても一定の小さいメモリ量で動作するように開発されているのが特徴。オートマトン理論の下、処

    米Google、高速・低メモリ消費の正規表現ライブラリ「RE2」を公開 | OSDN Magazine
  • 1