タグ

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

  • 心のバリアを取り去って「正規表現」に取り組む一歩を踏み出すためのメモ|DTP Transit 別館

    長年、後回しにしてきた「正規表現」。四の五の言わずにはじめようよ!と20年前の自分に伝えたく、まとめてみました。 詳しい方が見ると、乱暴だったり、おかしなところがあると思いますが、入り口に立つことが大切だと考えています(書いた人は文系・グラフィックデザイン関連です)。 はじめにたとえば、文章中に「コンピュータ」と「コンピューター」が混在していて、これを「コンピューター」に統一したいとき、あなたなら、どうしますか? 単純な検索置換なら、次のような順番で処理できます。 ❶「コンピューター」を「コンピュータ」に一括置換する ❷「コンピュータ」を「コンピューター」に一括置換する ❸ ちょっと心配なので「ーー」(音引きの繰り返し)をチェック これはこれでアリなのですが、1回の作業でできたらベターです。 しかし、「コンピュ-タ」のように正しく音引き(ー)が入力されていない場合には単純な検索置換ではお手

    心のバリアを取り去って「正規表現」に取り組む一歩を踏み出すためのメモ|DTP Transit 別館
    tohokuaiki
    tohokuaiki 2021/03/20
    Perl系とPOSIX系で微妙に違うのが嫌なんだな。前者はプログラムで、後者はshellで割と使うのがなんとも。
  • 危険な正規表現 - MOYO Laboratory

    ほんの数文字との一致評価で無限ループと思えるほどの猛烈な CPU 負荷を生み出す危険な正規表現が存在する。ふとした事で気付き、危うく Bug Parade に投稿するところだったその正規表現について考えてみる。 (.*)*^ このポイントはグループの中が評価対象と一致する文字の繰り返しであること (. が確実)、それに加えて最終的に評価対象とは一致しない事 (このため最後に行頭一致 ^ を使用) である。何故これが膨大な負荷になるか、若干推測も入るが文字数の増加に対するグループ化パターンを考えてみよう。 "1" (1) → NG "12" (1) (2) → NG (12) → NG "123" (1) (2) (3) → NG (12) (3) → NG (1) (23) → NG (123) → NG "1234" (1) (2) (3) (4) → NG (12) (3) (4) →

    危険な正規表現 - MOYO Laboratory
    tohokuaiki
    tohokuaiki 2018/04/15
    まぁ、ありうるよね。
  • Regex Tutorial - Unicode Characters and Properties

    Unicode is a character set that aims to define all characters and glyphs from all human languages, living and dead. With more and more software being required to support multiple languages, or even just any language, Unicode has been strongly gaining popularity in recent years. Using different character sets for different languages is simply too cumbersome for programmers and users. Unfortunately,

  • phiary

    phi I'm a Game Programmer and Frontend Engineer passionate about programming education. Math / C / C++ / C# / JavaScript / HTML5 / CSS3 / Python

    phiary
    tohokuaiki
    tohokuaiki 2016/07/26
    RegExp.escape= function(s) { return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');};
  • 正規表現に合致するファイル名をfindする方法 - grep Tips *

    findと正規表現の問題点 -regexオプションが「パスを含むファイル名全体が正規表現にマッチするものを検索する。」とあるが、grepで使うような正規表現を書いても検索できない。 これは正規表現の種類がデフォルトでemacsになっているのが原因。 たとえばYYYY-MM-DDが含まれるファイル名を探したい。また反対にYYYY-MM-DDが含まれないファイル名を探したい。 解決方法その1 regextypeを設定する。 findのregextypeに指定できるのはemacs以外にposix-awk, posix-basic, posix-egrep, posix-extended。 grepと同じにするにはregextypeをposix-basicにすればよい。 ※解決方法その1の注意点としては、grepと同じ種類の正規表現を使うといっても、部分一致で検索してくれるgrepとは異なり、fi

    正規表現に合致するファイル名をfindする方法 - grep Tips *
    tohokuaiki
    tohokuaiki 2016/04/04
    ...できねぇ。。
  • 遅いッ!遅すぎるッ!Java の正規表現のお話。 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは、ミドルウェア開発チームの青木です。 先日、アプリケーションサーバーが応答を返さなくなるトラブルに遭遇しました。 今回はその時のトラブルの原因と対策の顛末についてお話しようと思います。 現象 アプリケーションサーバーが突如応答を返さなくなりました。 現象が発生したアプリケーションサーバーのスタックトレースを見ると、あるスレッドの先頭が上記のようになっていました。 "qtp258153142-514386" prio=10 tid=0x00007f40b8dbf000 nid=0x7b4e runnable [0x00007f415ccb0000] java.lang.Thread.State: RUNNABLE at java.util.regex.Pattern$Loop.match(Pattern.java:4692) at java.util.regex.Pattern$G

    遅いッ!遅すぎるッ!Java の正規表現のお話。 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

    tohokuaiki
    tohokuaiki 2015/10/21
    こんな正規表現はちょっと自力で考えるの無理・・・。
  • fent/randexp.js @ GitHub

    Motivation Regular expressions are used in every language, every programmer is familiar with them. Regex can be used to easily express complex strings. What better way to generate a random data than with a tool you can easily describe what string you want? Thanks to String-Random for giving me the idea to make this in the first place and randexp for the nifty little `.gen` syntax. Install For node

    fent/randexp.js @ GitHub
    tohokuaiki
    tohokuaiki 2015/09/09
    正規表現からサンプルを提案してくれる。
  • 正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう

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

    tohokuaiki
    tohokuaiki 2014/04/10
    “正規表現のメタ文字 ^ と $ は「行」の先頭・末尾を指します。文字列の先頭と末尾を指定する場合は、\A と \z を使用します。”なるほどーー!!
  • 正規表現メモ

    \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

  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • メールアドレスに一致する正規表現

    メールアドレスに一致する正規表現 メールアドレスに一致する正規表現は「ありません」。 $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

    tohokuaiki
    tohokuaiki 2010/06/16
    誰がこんな正規表現をチェックしたんだよ・・。
  • JavaScript正規表現メモ。 (JavaScriptでよく使う書き方。) - こせきの技術日記

    タイトル変えました。旧タイトル「JavaScriptでよく使う書き方」。よく使うけど毎回忘れる。 正規表現にマッチするかどうか。 RegExp#testを使う。 /abc/.test("abcdefg") // => true String#searchはマッチした位置を返す。マッチしない場合は-1。先頭にマッチすると0でfalseなので注意。真偽値が欲しい場合はString#searchを使わない。 "abcdefg".search(/xxx/) // => -1 "abcdefg".search(/def/) // => 3 "abcdefg".search(/abc/) == false // => true 正規表現の部分マッチを得る。 部分マッチを得るには、RegExp#execかString#matchを使う。execとmatchの速度は大して変わらない。 正規表現のベンチマー

    JavaScript正規表現メモ。 (JavaScriptでよく使う書き方。) - こせきの技術日記
  • 「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
    tohokuaiki
    tohokuaiki 2009/03/19
    PHPerさんへ $regexp = '@^(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&\'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&\'*+/=?\^`{}~|\-]+))*)|(?:"(?:\\[^\r\n]|[^\\"])*")))\\@(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&\'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&\'*+/=?\^`{}~|\-]+))*)|(?:\[(?:\\\S|[\x21-\x5a\x5e-\x7e])*\])))$@';
  • Produce by Sieg: [Perl での正規表現]

    # 半角スペース $str = '\x20'; # 全角スペース $str = '(?:\xA1\xA1)'; # EUC-JP $str_sjis = '(?:\x81\x40)'; # SJIS # 全角数字 [0-9] $str = '(?:\xA3[\xB0-\xB9])'; # EUC-JP $str_sjis = '(?:\x82[\x4F-\x58])'; # SJIS # 全角大文字 [A-Z] $str = '(?:\xA3[\xC1-\xDA])'; # EUC-JP $str_sjis = '(?:\x82[\x60-\x79])'; # SJIS # 全角小文字 [a-z] $str = '(?:\xA3[\xE1-\xFA])'; # EUC-JP $str_sjis = '(?:\x82[\x81-\x9A])'; # SJIS # 全角アルフ

  • phpでひらがな、カタカナの判別

    phpでマルチバイト(日語)の文字を判別にはmb_eregを使えば簡単なのですが、php4ではmb_eregはデフォルトでは使えず、phpのインストール時に「--enable-mbregex」としてconfigureしなければいけません。現状ではphp5がインストールされているサーバーや「--enable-mbregex」でconfigureされたphp4サーバーはまだ少ないので、mb_eregが使えない場合は、以下のようにpreg_match関数のPerl正規表現で文字コードを判別します。Perlプログラマでしたらおなじみですね。 他のWebサイトではmb_eregを使った例ばかりなので、今更ではありますが、参考までにpreg_matchでの例を記述してみます。 後述のサンプルスクリプトで使用する変数は以下です。文字コードはEUC-JP。 <?php $str1 = mb_conver

  • 1