タグ

regexpに関するhiromarkのブックマーク (25)

  • 99%のEmailアドレスにマッチする正規表現公開される | ソフトアンテナ

    一見Emailアドレスにマッチする正規表現を組み立てるのは簡単そうに思えますが、RFC 5322に厳密に準拠した正規表現を創りだそうとするととんでも無い努力が必要となるようです。 「Email Address Regular Expression That 99.9% Works」は、様々なプログラミング言語ごとに、Emailアドレスに99%マッチする正規表現を掲載したサイトで、例えばPerl 5.10より前のバージョンのPerl用として、掲載されている長大な正規表現を見れば、その難易度の高さを確認することができます。 正規表現にはなんの解説もなくどのような意図をもって作られたのか説明はありません(よって99%マッチするかどうかは当のところは不明)。ちなみに日語で読める貴重な情報「Perlメモ」では、「perl5.6.0以前の perl ではメールアドレスの正規表現を正確に記述すること

    99%のEmailアドレスにマッチする正規表現公開される | ソフトアンテナ
  • 正規表現がもっと使える! 直感的にも使いやすくなった最新GNU AWKの拡張機能を知る

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

    正規表現がもっと使える! 直感的にも使いやすくなった最新GNU AWKの拡張機能を知る
  • 正規表現を解析して可視化してくれるサイトが凄すぎる件

    ある正規表現に対して、特定の文字列がマッチするかどうかをチェックするツールやサイトは沢山ありますが、正規表現そのものが何を意味しているのか、どんな文字列を期待しているのかを解析・解読・説明してくれるツールやサイトってなかなか見ない気がします。 他人の書いた正規表現を見て、「ん?」ってなったことはありませんか? 例えばこれ。 1 ^[a-zA-Z0-9-_.]@([a-zA-Z0-9_-]+\.)+[a-zA-Z]{2,4}$ これくらいなら分かりますが、複雑になってくるとつらい… いつかはマスターしたいけど…今は楽したい。 そう思ってググってみると…ありました! それがこちら。 Regexper http://www.regexper.com/ 正規表現を入力して Display をクリックすると、その正規表現が表す内容を図にして表示してくれます。 例えば先程の正規表現は、当記事の一番上の

    正規表現を解析して可視化してくれるサイトが凄すぎる件
    hiromark
    hiromark 2014/10/19
    なるほど
  • Perl の正規表現の「名前付き捕捉」がとても便利

    Perl の正規表現の「名前付き捕捉」がとても便利 2014-08-07-1 [Programming] Perlの正規表現で「名前付き捕捉」を使うと、マッチした部分に名前をつけておけるのであとから参照するときに便利。 「(?<name>...)」でマッチさせると、ハッシュ「%+」に保存されて、「$+{name}」でアクセスできるのです。同じ正規表現内では「\g{name}」など。 サンプルプログラムです。日付表現にマッチしたら、年、月、日をそれぞれ別途格納。そしてそれを正規化して出力。 サンプルプログラム: #!/usr/bin/env perl use strict; use warnings; while (<DATA>) { chomp; if (m{ (?<Y>[0-9]{4})\s?年\s? (?<m>[01]?[0-9])\s?月\s? (?<d>[0-3]?[0-9])\s

    Perl の正規表現の「名前付き捕捉」がとても便利
  • モダンなインターフェースで正規表現が学べる『RegExr v2.0』 | 100SHIKI

    よくあるツールではあるが、今風のインターフェースだったのでご紹介。 RegExr v2.0を使えば、さまざまな正規表現をブラウザ上で試すことができる。 ちゃんとリファレンスも付いているので、迷った時に参照してみるといいだろう。 また作った正規表現はコミュニティとシェアしたりお気に入りに入れることもできる。 そろそろ正規表現をマスターしたい・・・という人はいかがだろうか。

    モダンなインターフェースで正規表現が学べる『RegExr v2.0』 | 100SHIKI
  • 正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう

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

  • PerlでTrimする! - 旧燈明日記

    VB系では、文字列の両端にあるスペースを削除するに有名なTrimがあります。 しかし、Perlでは、残念ながらTrimはありませんが、以下の正規表現で一発です。 $string =~ s/^\s*(.*?)\s*$/$1/; ちょっと解説です。 まずは、\sは、文字クラス[ \t\n\r\f](左端にスペース含む)と同義です。 始めに、文字列の先頭から\sの0回の連続にマッチさせる。 つぎに、任意1文字の0回の連続に最小マッチさせて、これを$1に記憶する。 そして、\sの0回の連続を後尾までマッチさせる。 最後に、文字列全体を$1で置換する。 以下のように、2回に分ければ、両端でも片方のみでも大丈夫です。 $string =~ s/^\s+//; $string =~ s/\s+$//; 追記:上記は、半角系のスペース文字に対するTrimです。全角系のスペースを考慮に入れると以下が参考にな

    PerlでTrimする! - 旧燈明日記
  • 電話番号、郵便番号にマッチする真の正規表現 : にぽたん研究所

    Shibuya.pm #16 「夏の正規表現祭り」で、正規表現のお話をさせていただきました。 まぁ、「電話番号にマッチする正規表現」とか「郵便番号にマッチする正規表現」とかよく書かれてるけど、「どれもこれも手緩いよね」って話。 あ、だいぶはしょったかな。 とりあえずスライドに書いたので、発表をご覧になってない方はスライドからご覧ください。 ふと見返すと、このブログで電話番号の正規表現を公表するのは 3 度目ですが、あれからだいぶ経ってますね。 今ではもっと厳密な正規表現を作っています。 そして、Number::Phone::JP に続き、Number::ZipCode::JP という酔狂なモジュールが公開された記念で、郵便番号にマッチする正規表現を今回初めて公開しますが、そもそもここまで厳密な正規表現が公開されること自体、邦初公開ってヤツでしょう。 Shibuya.pm でも言いましたが

    電話番号、郵便番号にマッチする真の正規表現 : にぽたん研究所
    hiromark
    hiromark 2011/07/06
    うおお。
  • この機会にマスターしようぜ、正規表現、構文図、オートマトン - 檜山正幸のキマイラ飼育記 (はてなBlog)

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

    この機会にマスターしようぜ、正規表現、構文図、オートマトン - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 構造化テキストの間違ったエスケープ手法について : 404 Blog Not Found

    2010年09月22日21:30 カテゴリLightweight Languages 構造化テキストの間違ったエスケープ手法について 昨晩のtwitter XSS祭りは、ふだんもtwitter.comは使わない私には遠くの祭り囃子だったのですが、せっかくの自戒の機会なので。 Kazuho@Cybozu Labs: (Twitter の XSS 脆弱性に関連して) 構造化テキストの正しいエスケープ手法について 正しいアプローチは、全てのルールを同時に適用することです。 これは残念ながら(おそらく)必要条件であっても十分条件ではありません。 こういう(かなりええかげんな)正規表現でtweetをparseしていたとします。 re_http = '(?:https?://[\\x21-\\x7e]+)'; re_user = '(?:[@][0-9A-Za-z_]{1,15})'; re_hash

    構造化テキストの間違ったエスケープ手法について : 404 Blog Not Found
  • 米Google、高速・低メモリ消費の正規表現ライブラリ「RE2」を公開 | OSDN Magazine

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

    米Google、高速・低メモリ消費の正規表現ライブラリ「RE2」を公開 | OSDN Magazine
    hiromark
    hiromark 2010/03/15
    使えるかなあ。
  • ランダムな文字列の取得 - Perl表技集

    # 正規表現で指定する use strict; use warnings; use String::Random; my $sr = String::Random->new(); # 英字6文字+数字2文字 my $str = $sr->randregex('[a-zA-Z]{6}\d{2}'); print $str, "\n"; # 8文字以上16文字以下 my $str2 = $sr->randregex('.{8,16}'); print $str2, "\n"; # パターンで指定する use strict; use warnings; use String::Random; my $sr = String::Random->new(); # 記号1文字+英小文字5文字+数字2文字 my $str = $sr->randpattern('!cccccnn'); print $st

  • あまり知られていないけれど、HTML5では正規表現が使えるようになる

    正規表現といえば、主にsedやawkといったUNIXのコマンドで、あるいはPerlPHPJavaScriptなどのスクリプト言語の中などで、プログラマーが文字列を操作するために使う道具でした。 その正規表現がHTML5でサポートされる見通しです。いままで正規表現を使わずに済んでいたデザイナやコーダーといった職種の方々も、いずれ仕事としてきちんと正規表現を扱わなければならない時代がやってきます。 HTML5のどこに正規表現が使えるようになるの? 正規表現は、input要素のpattern属性の中で使えることになる予定です。W3Cが2009年8月25日付け公開しているHTML5のワーキングドラフトの「4.10 Forms」の「4.10.4.2.8 The pattern attribute」では次のように記載されています。 The pattern attribute specifies a

    あまり知られていないけれど、HTML5では正規表現が使えるようになる
    hiromark
    hiromark 2009/09/29
    へえ。
  • Regexp::Commonによる正規表現で数値やurlの書式チェック - end0tknr's kipple - web写経開発

    http://search.cpan.org/dist/Regexp-Common/ Regexp::Commonには、〜::number や 〜::URI::http 等の様々な正規表現が集められています。 Regexp::Common::number まず、Regexp::Common::numberを使用すれば、数値形式(整数や小数)チェックを簡単に実装することができます。 ※1,000のようにカンマ区切もOK。 #!C:/Perl/bin/perl use strict; use warnings; use Regexp::Common qw /number/; my @test_vals = (-1000,"-1,000",-1,0,1,100,1.0,1.5,"1000A"); for my $org_val ( @test_vals ){ #整数の数値書式check (-se

    Regexp::Commonによる正規表現で数値やurlの書式チェック - end0tknr's kipple - web写経開発
  • 正規表現でCommon Prefix Search

    正規表現でCommon Prefix Search 2007-05-15-1 [Programming][Algorithm] 正規表現でCommon Prefix Searchを行う力技な方法のPerlによるサンプル。 ちょっと試すとき用のコピペ用コード片、といった感じのものです。 TRIEとかオートマトンとかでちゃんとやるのが王道ですよ。 コード: use strict; use warnings; use utf8; binmode STDOUT, ":utf8"; my $str = "あうえういあおういいういああ"; my $key = "ういあ"; my @chars = split("", $key); my $pat = join("(", @chars).(")?" x $#chars); while ($str =~ /($pat)/g) { print "$1\n";

    正規表現でCommon Prefix Search
    hiromark
    hiromark 2009/08/25
    ちょっとした実験に便利そう。
  • 正規表現に見切りをつけるとき

    Perl, Rubyなど手軽に使えるプログラミング言語に慣れてくると、あらゆるテキストデータの処理に正規表現(regular expression)を使ってしまいがちです。 けれど実は、正規表現の処理能力を超えるフォーマットというのが存在します。その典型的な例が、XMLやJSONのように、入れ子になったデータフォーマットです。

    hiromark
    hiromark 2009/01/27
    調べてみる。
  • 正規表現エンジンを作ろう (1)

    はじめに こんにちは。hirataraです。 私が初めて正規表現を使ったのは、PerlによるCGIでの文字列処理でした。それから私はPerlを使い続け、今では正規表現なしのコーディングは考えられないほど、正規表現を当たり前の機能として日常的に使っています。昔は標準では正規表現をサポートしていなかったJavaも、今では正規表現をサポートするようになりました。Javaだけではなく、今日ではほとんどの高級言語にとって、正規表現はなくてはならない機能であると言っても過言ではないほどメジャーな機能となっています。 記事では、この正規表現の舞台裏に光を当てます。一見すると作ることが難しそうな正規表現エンジンですが、その根底には数学的な概念があり、その概念さえ知っていれば基礎となる機能の実装はそんなに難しくありません。この連載ではその数学的な概念をPythonを使って表現しながら、実際に動作する正規表

    正規表現エンジンを作ろう (1)
    hiromark
    hiromark 2008/11/05
    昔、やろうとして挫折したな、これ。
  • GNU Emacs Manual - Regexps

    Go to the first, previous, next, last section, table of contents. 正規表現の構文 正規表現には構文があり,そこではいくつかの文字は特別な意味を持ちます.そ れ以外の文字は通常の文字です.通常の文字は,単純な正規表現で,その 文字自体にマッチします.特別な文字とは,`$',`^',`.', `*',`+',`?',`[',`]',`\'です.他に特別 な文字が定義されることはありません.正規表現に現われる他の文字は,すべて 通常の文字です.ただし,前に`\'がある場合は別です. たとえば,`f'は特別な文字ではありません.したがって,通常の文字であ り,文字列`f'にマッチする正規表現となります(これは文字列`ff'に はマッチしません).同様に`o'は`o'のみにマッチする正規表現です. どんな2つの正規表現a,bも連結する

    hiromark
    hiromark 2007/03/12
    いっつも分からなくなるので覚書としてうれしい。
  • いやなブログ: Boost で再帰的な grep

    Boostの正規表現クラスを使う Boost の正規表現クラスを使ってみよう思い、ディレクトリ以下のファイルに対して再帰的に grep を行うコードを書いてみました。 以下がそのコードです。再帰的な grep はGNU grep の --recursive オプションでできるので実用的な意味はありません。 #include <assert.h> #include <unistd.h> #include <sys/mman.h> #include <sys/stat.h> #include <fcntl.h> #include <boost/bind.hpp> #include <boost/filesystem/operations.hpp> #include <boost/filesystem/path.hpp> #include <boost/regex.hpp> using name

    hiromark
    hiromark 2005/11/24
    これは使える。
  • 窓の杜 - 【今日のお気に入り】正規表現の作成とチェック「正規表現チェッカー」v1.20

    テキスト処理に便利な正規表現の作成を支援するソフト。正規表現は知っていても、まだうろ覚えという人にお勧め。正規表現とは、マクロやスクリプトなどで自由度の高い文字列検索に使われる表現方法で、“メタ文字”と呼ばれる特殊な意味の記号を使って記述する。たとえば検索で“Windows 98”“Windows98”“Windows Xp”“WindowsXP”“WindowsXP”のいずれにもヒットさせたいとき、正規表現なら単に“Windows ?(98|X[Pp])”と指定すればよいわけだ。ソフトは、メタ文字を一行説明つきのメニューから選択して正規表現の文字列を入力、処理対象のテキストを入力欄に入力しておき、続いて[実行]ボタンを押せば、マッチング結果を出力欄に表示してくれる。同時に2種類の正規表現を作成して結果を比べられるのもうれしい。入力テキストと作成した正規表現は、XML形式で保存しておくこ

    hiromark
    hiromark 2005/08/14
    これはいいかも。