タグ

regexpに関するockeghemのブックマーク (27)

  • パターンマッチングした部分の抽出 - mtoyoshi開発メモ

    rubyの例から。 str = "hello, world" if str =~ /hello, (.+)/ puts $1 end これで、「world」が出力されます。 これと同じことをjavascriptでどうやるか、ずっと分からなかったんだけど、ひょんな事から知ることが出来ました。 var str = "hello, world"; if (str.match(/hello, (.+)/)) { alert(RegExp.$1); } RegExp.$1だったとは! 今読んでいるこのに載っていました。 もちろん、Web脆弱性に関する解説なんだけど、javascriptのこういうテクとかがさらっと載っていたりして1粒で2度美味しい仕掛けになっています。この先もこういうのが散らばっているかと思うと楽しみです♪ 体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理

    パターンマッチングした部分の抽出 - mtoyoshi開発メモ
    ockeghem
    ockeghem 2011/05/23
    『Web脆弱性に関する解説本なんだけど、javascriptのこういうテクとかがさらっと載っていたりして1粒で2度美味しい仕掛けになっています』<紹介ありがとうございます #wasbook
  • 例えばPHPのpreg_replace関数でe修飾子を避ける - hnwの日記

    (2015/04/19追記)e修飾子はPHP 5.5からdeprecatedになっています。また、PHP7からは廃止されます。 PHPのpreg_replace関数では、e修飾子が利用できます。これはPerlから輸入された機能で、置換後パターンの文字列をPHP文法に従って評価する(evalする)というものです。Perlを知らないとあまり使わない機能かもしれませんが、Perlを知っているとPHPでも使いたくなるのではないでしょうか。記事では、preg_replace関数でe修飾子を使う場合の注意点を指摘し、代替案を示します。 preg_replace関数のe修飾子 preg_replace関数のe修飾子は次のような機能です。 e 修飾子を設定すると、preg_replace() は、参照先の対応する置換を行う際に replacement 引数を PHP コードであるとして取り扱います。re

    例えばPHPのpreg_replace関数でe修飾子を避ける - hnwの日記
    ockeghem
    ockeghem 2010/08/17
    分かりやすい解説をありがとうございます。あわせて読みたい→ http://d.hatena.ne.jp/teracc/20080606#1212764548
  • マッチするはずの正規表現がマッチしない現象 - T.Teradaの日記

    今日は、PHPでよく使用される正規表現エンジンであるPCRE(Perl Compatible Regular Expression)の、余り知られていない(と思う)制約について書きます。 プログラム 題材は下のPHPプログラムです。 <?php header('Content-Type: text/html; charset=latin1'); $url = $_REQUEST['url']; if (preg_match('/^(.*?):/s', $url, $match)) { $scheme = $match[1]; if ($scheme !== 'http' && $scheme !== 'https') { exit; } } echo '<a href="'. htmlspecialchars($url). '">link</a>'; 外部から受け取った「url」パラメータ

    マッチするはずの正規表現がマッチしない現象 - T.Teradaの日記
    ockeghem
    ockeghem 2010/04/13
    さすがはT.Teradaさんの内容過ぎて一般のアプリケーションプログラマには理解不能。よって、フィールド毎に満たすべき文字種・文字列長をチェックするのが吉。参考: http://itpro.nikkeibp.co.jp/article/COLUMN/20090525/330611/
  • 新党のホームページを見てメールアドレスのチェック方法について考えた - ockeghem(徳丸浩)の日記

    新政党「たちあがれ日」のホームページが話題になっていたので私も見てみた。そして、メーリングリストの受付フォーム中に記述されたメールアドレスのチェック用のJavaScriptが気になった。以下に引用する。 if (!node.match(/^[A-Za-z0-9]+[\w-]+@[\w\.-]+\.\w{2,}$/)){ alert("e-mailアドレスをご確認ください。"); return false; } https://www.tachiagare.jp/mail.php メールアドレスをチェックするための正規表現は、ネット上でたびたび問題視される定番ネタだか、その論点は、RFC(RFC2822やRFC5322)に対して準拠しているかどうかだと思う。例えばこれ(404 Blog Not Found:「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ)。 しかし、現実に

    新党のホームページを見てメールアドレスのチェック方法について考えた - ockeghem(徳丸浩)の日記
  • tachiagare.jp

    This domain may be for sale!

    ockeghem
    ockeghem 2010/04/11
    メールアドレスをチェックするJavaScriptのせいで、hiroshi.tokumaru@example.jpが登録できません
  • UTS #18: Unicode Regular Expressions

    Summary This document describes guidelines for how to adapt regular expression engines to use Unicode. Status This document has been reviewed by Unicode members and other interested parties, and has been approved for publication by the Unicode Consortium. This is a stable document and may be used as reference material or cited as a normative reference by other specifications. A Unicode Technical S

  • 第6回 Ruby M17N 事始め:正規表現編 | gihyo.jp

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

    第6回 Ruby M17N 事始め:正規表現編 | gihyo.jp
    ockeghem
    ockeghem 2009/04/06
    随所にワナが>『今回は,今話題の正規表現について,その歴史と限界,そして限界を越えた先までを解説します』<今話題のとは…/3ページ目『正規表現は用法用量を守って正しくお使いください』
  • Inconsistent matching behavior between POSIX character classes and Unicode classes against utf8-flagged strings · Issue #9696 · Perl/perl5

  • メールアドレスに一致する正規表現

    メールアドレスに一致する正規表現 メールアドレスに一致する正規表現は「ありません」。 $mail_address =~ /[a-zA-Z0-9_-]+\@[a-zA-Z0-9_-]+\.\w+/; じゃ駄目なの?という方もいらっしゃるかもしれませんが、 以下のアドレスを見てください。これらは実在する(もう削 除しましたが)アドレスです。 canada(@home)@tt.rim.or.jp "me@home"@digital-canvas.com Tom&Jerry/$100.00@digital-canvas.com canada@[192.168.0.1] # Sendmail: 8.9.1 # Mailer : Datula version 1.11.10 on Windows NT 4 # で確認しました。 これら以外どころか、RFC821,822によれば、クオートさえ すれば、A

  • へぼへぼCTO日記 - メールアドレス(addr-spec)の正規表現

    能書き 前エントリを書いてからいろいろと調べていて驚いたんだけど、日語のwebsiteで、それなりにまともにRFC822(RFC2822,RFC5322)に準拠した(もしくはきちんと意図的に準拠していない部分を選択している)正規表現はPerlだろうがPHPだろうがRubyだろうが軽くぐぐった程度では見当たらない。PerlのモジュールのEmail::AddressもEmail::Validも程度の差はあれ問題を抱えている。そこらへんの既存の出回ってる正規表現にどういった問題があるかなんてことは次回エントリにて。 というわけで、PerlPHPRubyでRFC5322準拠なメールアドレス(addr-spec)の正規表現を以下に示します。尚、addr-specの最終的な正規表現のみならずそれを作成するに至る部分も併記してあります。これは、最終的な正規表現だけでは難解すぎてとても理解できないか

    ockeghem
    ockeghem 2009/03/22
    id:nihen Google Ranking Checker http://google.bookstudio.com/ranking.html で調べると18位でした
  • regexp - 'test@[127.0.0.1' . "\\\x1f]" はRFC2822準拠 : 404 Blog Not Found

    2009年03月20日05:00 カテゴリLightweight Languages regexp - 'test@[127.0.0.1' . "\\\x1f]" はRFC2822準拠 私自身驚いたのだが、'test@[127.0.0.1' . "\\\x1f]"はRFC2822に準拠している。 へぼへぼCTO日記 - 「danコガいはもう正規表現をblogに書くな」と言わせないでくれ おかげで上記のコードもvalidだ。なんてこったなぜそうなのか、というのは、RFC2822のdomain-literalの仕様による。 domain-literal = [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS] 「[]で囲まれたdcontent」っていったいなんだ? dcontent = dtext / quoted-pair 「dtextまたはquoted

    regexp - 'test@[127.0.0.1' . "\\\x1f]" はRFC2822準拠 : 404 Blog Not Found
    ockeghem
    ockeghem 2009/03/20
    『正規表現を正規にやろうとするとこれほど難しいものだとは』<難しいですね。これをアプリケーションプログラマに書かせるのは酷で、拡張モジュールにするか、簡易なチェックでよしとすべきでしょう
  • へぼへぼCTO日記 - 「danコガいはもう正規表現をblogに書くな」と言わせないでくれ

    (タイトルはid:hasegawayosukeさんが言ってたよ) ああ、まただよ… 「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ 正規表現って、プログラミング言語間の差が少ないサブ言語なのに、なぜ「DAN」がつくとダメ正規表現ばかり登場するのか。うんざりだ。 飽きたので以下略。 簡潔に。(正規表現はdanさんのものからシングルクォートコンテキストにあわせてエスケープをしてあります) これの結果が「valid」になる。当然rfc5322でdot-atomには改行は(CRであれLFであれ)許されていない。 対策はdanさん自身が^$でなくて\A\zを使おうで述べているとおり。 ただしjavascriptではmフラグをつけない限りは$は改行直前にはマッチしないので問題なかったりもする。 ところでこの正規表現には他にも問題が残っている。domain-literalで\\\Sにマ

  • 「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ : 404 Blog Not Found

    2009年03月19日18:00 カテゴリLightweight Languages 「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ ああ、まただよ... かなり使えるPHPの正規表現まとめ - IDEA*IDEA 〜 百式管理人のライフハックブログ 〜 正規表現って、プログラミング言語間の差が少ないサブ言語なのに、なぜ「PHP」がつくとダメ正規表現ばかり登場するのか。うんざりだ。 かなり使えるPHPの正規表現まとめ - IDEA*IDEA 〜 百式管理人のライフハックブログ 〜メールアドレスは厳密にチェックしようとするとなかなか難しいのですが、簡単なチェックだったらこれでOKぽいですね。 /^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$

    「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ : 404 Blog Not Found
    ockeghem
    ockeghem 2009/03/19
    『da.me..@docomo.ne.jpを引っ掛ける』<PHPの一般的な用途では引っ掛けてもいいのでは?つまり、ユーザの「既に持っているメールアドレス」の書式チェックであれば、厳密なRFC通りのチェックでもなくてもよいと思いますが
  • Perlの正規表現のバグ? (前編) - moriyoshiの日記

    「鬼車の[[:print:]]はPOSIX流じゃないらしい」でid:ockeghemさんやid:nihenさんと先週いろいろやりとりしてた中で、一つだけ解決していない問題があった。 utf8フラグが立っているかどうかでPOSIX文字クラスのマッチの挙動が変わるという件。 大変詳しい調査をありがとうございます。トラックバックのブログに書いたように、[:print:]の挙動は、Perlでもutf8フラグの有無でも変わってくるようです。[:print:]は実用できないなと思いました え?まじ?と思うも、一応Perlのコード例も出していたので検証しないわけにはいかない。以下のようなコードで試してみたが、utf8フラグが立っていない場合と同じ結果となり、再現しないのだ。 use encoding 'utf8'; for (split //, "\t\r\n a") { printf("%d:%d:%

    Perlの正規表現のバグ? (前編) - moriyoshiの日記
    ockeghem
    ockeghem 2009/03/15
    これはすごい
  • 正規表現メモ

    \x{} \pは後続する名前が表すクラス(プロパティ、スクリプト、ブロック)に属する文字にマッチし、 \Pは後続する名前のクラスに属さない文字にマッチします。 クラスの名前が一文字のときはブレースを省略できます。 クラス名の前に^を置くことにより否定形の指定を行うことも可能です。 Perl 5.8 での変更点 Perl5.8以降(5.6でも使えたようですが)では \pや\Pで始まるプロパティ指定に標準Unicode属性を使うこともできます。 詳しくは perlunicode perlunicode - Perl における Unicode サポート を参照してください。 日語による説明が Unicodestandard にもあります。 Perl 5.8以降ではユーザーが任意のプロパティを作成することができます (IsまたはInを必ず前置)。 詳しくは perlunicode perluni

  • PHP: preg_match - Manual

    Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su

    ockeghem
    ockeghem 2009/03/15
    /uオプションでUTF-8対応になると聞いてやってきましたが、そういう細かいことは載っていないのですね
  • 2006-12-13

    評伝シャア・アズナブル 《赤い彗星》の軌跡 下巻 (KCピ-ス) 作者: 皆川ゆか出版社/メーカー: 講談社発売日: 2006/12/07メディア: 新書購入: 5人 クリック: 43回この商品を含むブログ (92件) を見る 読破!当に他人事とは思えないぜ。。。 っていうか、Amazonランキングで20位台って初めて見た。(w まずは、この辺(1・2・3・4・5)を参照してもらった上で、どうしてこうなっているのか説明をしたいと思います。 書こうと思ったキッカケはオレンジニュースで掲載されていたので。 参照して頂ければ(参照しなくても)分かると思いますが、PHP4系統ではマルチバイト対応正規表現関数(mb_ereg系)はUTF-8の文字列を正しく処理できませんが、PHP5系統では正しく処理できます。 理由は簡単で、PHP4系統とPHP5系統ではマルチバイト対応正規表現ライブラリの実装が全

    2006-12-13
    ockeghem
    ockeghem 2009/03/15
    mb_eregがUTF-8をうまく扱えないのは、PHP4の話なのですね。まぁそうだろうな
  • 「すべての漢字を取り出す正規表現」をPHPで試す、を正しく行う:phpspot開発日誌

    Information Flow and Stock: [PHP] mb_ereg()じゃない、preg_match_all()に/uをつけるんだ! なので、できる限りpreg系の関数を使いたいわけですが、検索対象や検索パターンに日語が含まれているときは、日語処理に対応したereg系の関数であるmb_ereg系の関数が使われることが多いようです。 以前、「すべての漢字を取り出す正規表現」をPHPで試す、を正しく行う方法。 以前はmb_eregによる方法を示しましたが、次の方法の方がうまく動作するようです。 preg_match_all('/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/u', $strToSplit, $aMatches); print_r($aMatches); // マッチ結果が全出力 確かに、なぜか取れない漢字があ

  • [PHP] mb_ereg()じゃない、preg_match_all()に/uをつけるんだ!

    ウノウラボ Unoh Labs: PHPのちょっとしたコツ  最近のスクリプト言語は機能が多く、基的な機能はほとんど実装されているので、アルゴリズムをどうこうするより、どの機能を使うか選ぶ方が重要だったりしますね(コーディングの効率的にも)。  自分にもそういったレベルで気をつけていることがいくつかあります。 -[早起き生活]PHPのパフォーマンスチューニング -[早起き生活]PHPのパフォーマンスチューニング その2:count()も使い過ぎると重くなる -[早起き生活]PHPのパフォーマンスチューニング その3:APC投入  あと、最近気づいたTIPSとしては、 日語を正規表現検索したいときでもereg系の関数を使うのはやめとけ なんてのもあります。  PHPの組み込み正規表現関数にはPHP独自のereg系とPerl互換のpreg系がありますが、ヘルプに書いてあるとおり、ereg系

  • .NET の正規表現 - .NET

    正規表現を使用すると、強力、柔軟、そして効率的な方法でテキストを処理できます。 正規表現によるパターン一致の広範な表記法を使用すると、大量のテキストをすばやく解析し、次のことを行うことができます。 特定の文字パターンを検索する テキストを検証して、定義済みのパターン (電子メール アドレスなど) と一致することを確実にする テキスト部分文字列の抽出、編集、置換、または削除を行う 抽出された文字列をコレクションに追加して、レポートを生成する 文字列処理や大量のテキストを解析する多くのアプリケーションにとって、正規表現は欠くことのできないツールです。 正規表現のしくみ 正規表現を使ったテキスト処理の最も重要な部分は、.NET の System.Text.RegularExpressions.Regex オブジェクトによって表される正規表現エンジンです。 正規表現を使ったテキスト処理では、正規表

    .NET の正規表現 - .NET