タグ

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

  • 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
  • VimでPHPのコードをシュワルツ変換してソートする - Qiita

    (この記事はピクシブ株式会社 AdventCalendar 2017の12日目の記事です) 今回のあらすじ リファクタリングDSLとしてのVim scriptの威力に再び社内がおののいてる — tad3 (@tadsan) October 25, 2017 どうおののかせたかを紹介します。 問題 pixivのURLルート定義は以下のような形になっています:1 function getUrlRouteMap() { $route_map = [ '/' => [ 'controller' => 'IndexController', ], '/discovery' => [ 'controller' => 'DiscoveryController', ], '/user/:user_id/series' => [ 'controller' => 'UserSeriesIndexControll

    VimでPHPのコードをシュワルツ変換してソートする - Qiita
  • 鬼雲に非包含オペレータを実装した話 - Qiita

    概要 田中哲さん(@tanaka_akr)が以前提案された「非包含オペレータ」というものを(実験的に)鬼雲に実装しました。これを使うと例えば C 言語のコメントにマッチする正規表現などが簡単に書けるようになります。 ここでは、非包含オペレータとは何か、また今後の見通しなどについて説明します。 非包含オペレータとは? 非包含オペレータは田中さんが約 9 年前に発表された、正規表現の拡張です。理論的背景と実装例は以下のスライドと論文に示されています。 正規表現における非包含オペレータの提案 Absent Operator for Regular Expression 従来の正規表現では、「特定の文字以外の 1 文字にマッチする正規表現」は文字クラスの否定を使って [^x] のように書くことができますが、それに対して「特定の文字列を含まない文字列にマッチする正規表現」は簡単に書くことはできません

    鬼雲に非包含オペレータを実装した話 - Qiita
  • 正規表現メモ

    \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

  • golang で正規表現クロスワードを解く - Qiita

    この記事は Go Advent Calendar 2016 最終日の記事になります。参加頂いた皆さんお疲れさまでした。 今年も昨年に引き続き、25人以上の方が「何か書きたい」と名乗り出て頂き、gogo2、go3 の3(2年連続)、計75エントリが揃う事になりそうです。Go 言語の人気が高まってきているのが良くわかるアドベントカレンダーでした。 あらすじ 普段あまり表だった所には姿を現さないのですが、今年は builderscon 2016 に登壇させて頂きました。 とても新鮮な体験で、味わった事のない緊張の中、いろいろな反響を貰いました。いい体験が出来たと思います。ありがとうございました。登壇し終えて数時間はなんだか緊張のほぐれた変な感じを味わっていました。懇親会の時あたりでようやく皆さんとお話する事ができて Vimmer の皆さんと Vim 談義をしてきました。 その懇親会で香り屋さ

    golang で正規表現クロスワードを解く - Qiita
  • vim-jp » Hack #166: ローマ字の大文字/小文字を変換する

    ツイート ローマ字の大文字と小文字を変換する機会は意外に多いです。なので、Vim にはこれを行うための便利な機能があります。 ~ ~ を押すと、カーソル下のローマ字の大文字/小文字を相互に変換します。大文字は小文字に、小文字は大文字になります。この際、カーソルを右に進めます。 [count] を指定することで複数の文字を同時に変換することができます。変換は一括で大文字/小文字にするのではなく、文字単位で作用します。つまり VimHack は vIMhACK になります。 gu gU g~ これらはオペレータで、対象に対してそれぞれ、gu は小文字への変換を、gU は大文字への変換を、g~ は大文字/小文字の相互変換を実行します。 例えば、現在のカーソルのある単語を全て大文字にしたい場合は gUiw です。 また、yy などと同様に行に対して動作する gugu guu gUgU gUU g~

  • 正規表現で「制御文字以外」のチェック - ockeghem's blog

    一般に、セキュアコーディングの基として入力値の検証(Validation)をせよということになっていますが、これが変な方向に行くといわゆる「サニタイズ」のような手法になってしまいます。以前も指摘したように、アプリケーションとしてのValidationは仕様に従って行うべきものです。 ですが、概ねどの場合でも行うべき検証として以下があると思います。 文字エンコーディングの妥当姓 制御文字(\x00〜\x1f, \x7f)のチェック 文字列長のチェック このうち後ろ二つを正規表現として書くにはどうすればいいかを考えていました。つまり、「制御文字以外の文字でm文字以上n文字以下」というようなチェックです。m文字以上、n文字以下は、{m,n}で書けるので、問題は「制御文字以外の文字」です。これはtextタイプのinput要素で、かつアプリケーション仕様としては文字種の制限をしない場合を想定してい

    正規表現で「制御文字以外」のチェック - ockeghem's blog
  • 正規表現で大文字や小文字に置換する - Qiita

    \uや\lを使えば、大文字や小文字に置換することができます。 大文字へと置換 たとえば foo_bar_hoge_piyo の (^|_)(.)を\u\2に置換すると、 FooBarHogePiyo とアッパーケースにできます。 小文字へと置換 LOG_FILE.TXT の(.)を\l\1に置換すれば log_file.txt とロワーケースにできます。 使えないエディタもあります エディタによっては、採用している正規表現エンジンの違いで大文字/小文字への置換ができません。 Vimや、Windowsだとサクラエディタなら使えます。

    正規表現で大文字や小文字に置換する - Qiita
  • 正規表現ジェネレーターコマンド『rgxg』を使ってみる | 俺的備忘録 〜なんかいろいろ〜

    諸事情あって正規表現について調べていたところ、どうやら正規表現を作成してくれる『rgxg』というコマンドがあるようだ。 早速、インストールして使ってみよう。 なお、検証したOSはUbuntu 14.04 LTSを用いている。 1.インストール まずはインストールから。 以下のコマンドでインストール出来る。 sudo apt-get install rgxg これでインストールが出来た。 2.実行 さて、それでは実際にコマンドを実行してみよう。 詳細な使い方については、manで見てもらうとして、ここではいくつかの例を抜粋して紹介する。 このrgxgコマンドでは、基的には以下のようにサブコマンドを指定して正規表現を生成する。 rgxg [alternation,cidr,escape,range] 正規表現にしたい内容 blacknon@BS-PUB-UBUNTU-01:~$ rgxg Us

  • 正規表現のキャプチャの応用 - rikubaのブログ

    キャプチャした部分文字列を、文字クラスや先読みに転用できることに気づいた。 順不同の組み合わせ 例えば、ショートカットキーを表す文字列(ここでは ctrl+shift+alt+x とする)にマッチする正規表現において、ctrl と shift と alt の順番に関わらずマッチさせたい場合。 全ての組み合わせを列挙する方法もあるけれど var regexp = /^(?:(?:ctrl\+(?:shift\+alt|alt\+shift))|(?:shift\+(?:ctrl\+alt|alt\+ctrl))|(?:alt\+(?:ctrl\+shift|shift\+ctrl)))\+x$/; regexp.test("alt+shift+ctrl+x"); // => true regexp.test("alt+ctrl+alt+x"); // => false キャプチャと否定先読み

    正規表現のキャプチャの応用 - rikubaのブログ
  • 正規表現:悪い表現、いい表現、最良の表現 | POSTD

    わずかな文字がいかにしてパフォーマンスに大きな違いを生めるかというお話 正規表現は、私たち開発者がことあるごとに駆使する呪文のようなものですが、私たちはそれをどんな時も巧みに使いこなしていると言えるでしょうか。正規表現は繊細で精密な言語です。入念な慎重さで記述してやれば、ボウリングで一瞬にして完璧なストライクを取るような強力なテキストとなり得ます。 しかし、正規表現が精密さに欠ける状態で投げ出されると、さながら酔っ払いがよろよろとつまずきながらテキストの上を歩くがごとく、そのボールはぎこちなくボウリングのレーンを転がり、ピンを1つか2つ倒すだけで終わってしまうのです。 これら2つの正規表現の違いは何なのか。何がいい表現と悪い表現を分けるのか。正規表現に素晴らしい力を与えるメカニズムを、この投稿で明かしてみようと思います。効果的な表現とそうでない表現との大きな違いをきっと分かってもらえるはず

    正規表現:悪い表現、いい表現、最良の表現 | POSTD
  • vim-jp » Hack #75: 正規表現で先読み/後読みを使用する

    ツイート Hack #70 で、正規表現においてマッチする範囲を制限する方法を紹介しましたが、他の正規表現エンジンで同じようなことをしたい場合、肯定先読みや否定先読みと言った機能が使われます。 そして当然、Vim にも肯定先読みや否定先読みの機能は備わっています。 肯定先読み/否定先読み/肯定後読み/否定後読み 先読み、後読みとはすなわち、特定のパターンが対象のパターンの後ろに来る(先読み)、もしくは前に来る(後読み)ことを条件付けることです。否定の場合は逆に来ないことを条件付けます。 肯定の場合は単に続けて正規表現を構成した場合でもマッチする個所は同じですが、マッチする対象が異なります。先読み、後読みの部分はあくまで条件なのでマッチ対象には含まれません。 Vim では以下のパターンを置くことで直前の文字、もしくはグループを先読み、後読みに指定します。 肯定先読み

  • Perlメモ

    複数のプロセスでロック状態が異常であると判断し,そのうちの 1つがロックを解除したことにより,別のプロセスがロックしたにもか かわらず,先ほどロック状態が異常であると判断したプロセスによってこの正常なロッ クを解除されてしまう可能性があります. この方法の問題点は,異常なロック状態を解除する操作が正常なロック状態をも 解除できてしまうことにあります.逆に言えば,異常なロック状態を解除する操作に よって正常なロック状態を解除できなければ問題ないわけです.そのためにはどうす ればよいのか? 答えはロック状態が常に変化していけば よいということです.そして,これを実現するのに都合がよいのが rename による方法になります. 最初のスクリプトで説明しますと,ロックファイルが lockfile という 名前のときがロックが解除されている状態で,lockfile987654321 のよう に後ろに

  • 3で割り切れる2進数を表す正規表現 - Qiita

    Lingrの「じょうほうかがく!」部屋で「3で割り切れる2進数を表す正規表現」が話題になって解いてみたので備忘録として記事にします。 ※ この部屋はパスワード必須なので知っている方しか入れません。 「3で割り切れる2進数を表す正規表現」の解は以下のようになりました。 ^(0*( | 1 (00|11)* 01 (00|11)* 01 | 1 (00|11)* 01 (00|11)* 10 (00|11)* 10 | 1 (00|11)* 01 (00|11)* 10 (00|11)* 01 (00|11)* 01 | 1 (00|11)* 10 |01 (00|11)* 01 (00|11)* 01 |01 (00|11)* 01 (00|11)* 10 (00|11)* 10 |01 (00|11)* 01 (00|11)* 10 (00|11)* 01 (00|11)* 01 |01

    3で割り切れる2進数を表す正規表現 - Qiita
  • 正規表現入門 星の高さを求めて

    第13回日情報オリンピック(JOI2013/2014)春季トレーニング合宿での講義資料です. http://www.ioi-jp.org/camp/2014/2014-sp_camp-rules.html 【概要】 正規表現とはパターンマッチングのための記法であり,文字列検索の便利な道具として広く親しまれています.この講義では,正規表現の基礎から始め,「星の高さ」という性質に注目して正規表現の裏側に潜む数理構造に迫っていきます.1960年代から未解決である「星の高さ問題」に浪漫を感じてもらえると幸いです.Read less

    正規表現入門 星の高さを求めて
  • 正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう

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

  • TEST CORDING » Sassの@functionの使い方まとめ – プログラマブルな処理は@function

    Let's set up your website! Let's set up your website!

  • 本当にキモい Vim script - 正規表現編 - 永遠に未完成

    Vim Advent Calendar 2012 の 339 日目の記事です。 先日、Lingr で :s コマンドの引数をパースする方法についての話になりました。 :s はご存知の通り、置換コマンドです。 :[range]s[ubstitute]/{pattern}/{string}/[flags] [count]今回 [range] と [count] は無視するとして、それ以外の {pattern} と {string} と [flags]、あとはパターン内でエスケープされているかもしれない区切り文字(多くの場合は /) が何になるか知りたい。 結果的にできたのは以下のような正規表現です。 \v^s%[ubstitute]([\x00-\xff]&[^\\"|[:alnum:][:blank:]])(%(\\.|.){-})%(\1(%(\\.|.){-})%(\1([&cegiIn

    本当にキモい Vim script - 正規表現編 - 永遠に未完成
  • サービス終了のお知らせ

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

  • awk 正規表現で絞込みの速度 - おぼえがき

    time awk -F" " '/正規表現/ {print $1,$5}' ${ファイル} real 0m13.641s user 0m13.528s sys 0m0.127s time awk -F" " '{print $1,$5}' ${ファイル} | grep '正規表現' real 0m2.331s user 0m3.505s sys 0m0.208s んーーー。 処理速度がぜんぜん違う。 前者のほうが、個人的には良いんだけど、この速度差を考えると、 後者だなぁ。 何でだろう。。。 って思ってたけど、 time awk -F" " 'match($5,/正規表現/) {print $1}' ${ファイル} real 0m2.101s user 0m1.971s sys 0m0.136s おおーー速くなった。 awkの組み込み関数のmatchを使えば、指定したフィールドに対して正規

    awk 正規表現で絞込みの速度 - おぼえがき