タグ

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

  • 正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう

    正規表現によるバリデーション等で、完全一致を示す目的で ^ と $ を用いる方法が一般的ですが、正しくは \A と \z を用いる必要があります。Rubyの場合 ^ と $ を使って完全一致のバリデーションを行うと脆弱性が入りやすいワナとなります。PerlPHPの場合は、Ruby程ではありませんが不具合が生じるので \A と \z を使うようにしましょう。 はじめに 大垣さんのブログエントリ「PHPer向け、Ruby/Railsの落とし穴」には、Rubyの落とし穴として、完全一致検索の指定として、正規表現の ^ と $ を指定する例が、Ruby on Rails Security Guideからの引用として紹介されています。以下の正規表現は、XSS対策として、httpスキームあるいはhttpsスキームのURLのみを許可する正規表現のつもりです。 /^https?:\/\/[^\n]+$/

    atsushifx
    atsushifx 2014/03/04
    行と文字列のワナ。行頭、行末をあらわすメタ文字^,$をつかうと複数行に渡るインジェクションコードを見逃す恐れがある
  • いまさらgrepが10倍高速化したのはなぜか – はむかず!

    最近GNU grepコマンドの最新バージョンがリリースされ、速度が10倍になったとのアナウンスがあった。それを聞いて、なんであんな枯れた技術に10倍もの高速化の余地があったのだろうと不思議に思った人も多いだろう。 ニュース記事:grepコマンド最新版、”-i”で10倍の高速化 家のリリースノート:grep – News: grep-2.17 released [stable] 今回のリリースでは正確には、マルチバイトロケールで、-iオプション(–ignore-case、つまり大文字小文字を区別しないオプション)をオンにした時の速度が10倍くらいになったそうだ。 なぜそんなに速くなったのか?逆を言えば今までなぜそんなに遅かったのか? そもそも、多くの日人にとって「大文字小文字の区別」というと英語のアルファベットか、せいぜいフランス語とかドイツ語とかのアクサン記号・ウムラウトがついたものく

    atsushifx
    atsushifx 2014/02/24
    Unicode対応というかマルチロケールだから遅くなってたのか。日本語でも通貨記号の円はバックスラッシュとは別のコードが割り当てられたし他人事ではない
  • 言語設計と文字列API

    リンク t.co プログラミング言語内の正規表現リテラルについて — KaoriYa プログラミング言語内の正規表現リテラルが是か非か、 そんな議論にいまさらながら参加してます。 ただしどちらかの立場に立って擁護したいというわけではなく、 話を抽象化というか一般化して問題の質にせまります。 Kazuho Oku @kazuho 言語設計論では、基「書くコスト」と「保守(読む)コスト」の2種類にわけて考えればいいと思ってる / 言語のAPI仕様を最小にするのには正規表現リテラルの導入が有効というのが僕の論 / “プログラミング言語内の正規表現リテラルにつ…” http://t.co/whvioxMAII 2013-12-20 14:14:16

    言語設計と文字列API
    atsushifx
    atsushifx 2013/12/20
    つまりはプログラミング言語の言語構造にDSLを組み込むか否か、APIをどうするかの問題。DSLのひとつであるSQLにActiveRecordやLINQが出たきたことを考えると正規表現にマクロと変数がつくといろいろと進化しそう
  • プログラミング言語における正規表現リテラルの必要性について

    Twitterに書いたことのまとめです。 プログラミング言語の仕様の一部として正規表現リテラルを提供することの得失について、JavaScriptを例に説明します。 ■より簡潔なコード 言うまでもありませんが、正規表現リテラルを使った方が簡潔なコードになります。 (new RegExp("abc")).exec(s) // リテラルを使わない場合 /abc/.exec(s) // リテラルを使った場合 また、正規表現リテラルがない場合は、文字列リテラルとしてのエスケープと正規表現としてのエスケープが二重に必要になる結果、コードの保守性が低下します注1。 new RegExp("\\\\n"); // リテラルを使わない場合 /\\n/ // リテラルを使った場合 ■エラー検出タイミング 正規表現リテラルがない場合、実際にその正規表現が評価されるまで記述エラーを検出することができません。正規表

    atsushifx
    atsushifx 2013/12/18
    問題は学習コスト、標準化、読みやすさだと思っている。言語やライブラリによって正規表現にゆれがあるし、コメントにも出ているけど正規表現のエスケープと文字列のエスケープが重なるとReadbilityが落ちすぎて悲惨。
  • 正規表現が構文として必要かどうかという話から

    FUJI Goro @__gfx__ dartVMはほんとに速くなったし、標準化はほんとに期待してる。あと正規表現さえ構文に組み込まれればサーバーサイドでも使えますよこれは。 2013-12-15 22:04:54 methane @methane @__gfx__ なんでサーバーサイドで使うのに正規表現が構文で必要なんですか…? PythonGo も正規表現構文無いけど不自由感じないし、むしろリテラルあるとシンプルな文字列操作で良い場面で正規表現を使う悪習が広まるので良くないと思うのですが。 2013-12-15 22:43:35

    正規表現が構文として必要かどうかという話から
    atsushifx
    atsushifx 2013/12/16
    正規表現は文字列の検索・置換のためのプログラミング言語。しかもUNIX時代からの古さと方言が残っている。使いこなせれば強力だけど、記号による記述なので教育コストが高い。もっとモダンな正規表現があるといい
  • Windows向けの正規表現検索、置換ツール·grepWin MOONGIFT

    Linuxでよく使われるコマンドの一つにGrepがあるだろう。ファイルの内容を調べながら検索してくれるので、関数を洗い出したり設定部分を見つけたりするのに役立つ。開発者の方であればその便利さはよく分かっているだろうし、それがWindowsにはなぜないのかとすら思うかも知れない。 Windowsらしい初心者にもやさしいGrepツール だがご安心を。もちろんWindowsにも存在する。しかもWindowsらしくGUIを使って分かりやすインタフェースで提供されている。それがgrepWinだ。 grepWinはGPLの下に公開されているオープンソース・ソフトウェアで、GUIを使ってGrepを実行し、さらに置換まで行ってくれるソフトウェアだ。 grepWinではファイルを探すディレクトリを指定し、検索文字列を設定する。もちろん正規表現が利用できるが、逆に使わずに検索することもできる。サブディレクトリ

    Windows向けの正規表現検索、置換ツール·grepWin MOONGIFT
    atsushifx
    atsushifx 2008/12/14
    Windows向けの検索・置換ツール
  • 1