並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 236件

新着順 人気順

正規表現の検索結果1 - 40 件 / 236件

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

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

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

      正規表現の「先読み(lookahead)」「後読み(lookbehind)」について紹介します。 正規表現の「位置へのマッチ」 正規表現は、文字列のパターンマッチに使われます。たとえば [0-9]{4} は数字4つが並ぶ文字列にマッチする表現です。 多くの正規表現は「文字列」にマッチしますが、「文字列」ではなく「位置」にマッチする表現があります。これは、アンカーと呼ばれます。また、長さ0の文字列にマッチすると考えて、ゼロ幅アサーションとも呼ばれます。 アンカーの例として、^(先頭)$(末尾)\b(単語の境界)などがあります。 この例では、cat にはマッチします。一方、category や concat は cat を含みますが前後が単語の境界になっていないためマッチしません。 先読み 先読み(lookahead)は、位置にマッチする記法の一種です。位置の指定に正規表現を使います。(?=

        正規表現の先読み・後読み
      • 【個人開発】正規表現を学ぶ狩りに出ませんか?モンスターを倒しながら正規表現が学べるゲーム「Regex Hunting」を作りました - Qiita

        【個人開発】正規表現を学ぶ狩りに出ませんか?モンスターを倒しながら正規表現が学べるゲーム「Regex Hunting」を作りましたRubyRails正規表現TypeScriptReact はじめに はじめまして! 個人開発者のハガユウキと申します。 突然ですが、皆さん正規表現はお好きですか? 私は好きです。「複数の文字列を一つのパターンで表現できる」部分にすごく面白味を感じています。 もっといろんな方に正規表現を知っていただきたい、好きになってほしいと思っています。 しかし、現状では2つの課題があると感じています。 正規表現の勉強自体がそもそも面白くない。 正規表現を勉強しても、しばらく使わないと忘れる。 この2つの課題を突破できるサービスは、現状存在しません。 そのため、楽しみながら正規表現を学べるサービスがあれば良いなと思いました。 作りました。 ▼スライド型正規表現学習ゲーム【Reg

          【個人開発】正規表現を学ぶ狩りに出ませんか?モンスターを倒しながら正規表現が学べるゲーム「Regex Hunting」を作りました - Qiita
        • 正規表現の"正規"とは何か気になったら正規表現の歴史を紐解くことになってしまった話

          正規表現の"正規"って何 ある時ふと思いました。 「正規表現の"正規"って何だろう?」 「何を根拠に"正規"を名乗っているのか?」 と。 「誰かが『これが正規の表現だ』と言ったはず」で、 「それは周りにどうやって"正規"だと認められたのだろう」 ということが気になったので調べてみました。 "正規表現"という名前でなくて、"ジャックさんの表現"とか"記号ごちゃごちゃ表現"だったらこんな疑問も持たなかったのですけど。 数学における"正規"とは 一般に"正規"というと、"正規品"や"正規の手順"といったように"本物の(genuine)"や"公式な(official)"といった意味がありますが、数学の"正規"はちょっと違います。 数学で"正規"(および"正則"、英語では"regular"または"non-singular")は、ある概念に強い制限をかけたもの、という意味です。強い制限をかけたものは取

            正規表現の"正規"とは何か気になったら正規表現の歴史を紐解くことになってしまった話
          • 正規表現の脆弱性 (ReDoS) を JavaScript で学ぶ

            先日、このようなツイートを書いたところ、かなりの反響がありました。 JavaScript の正規表現の脆弱性の例でいうと、例えば /\s+$/ は脆弱性があると言える console.time(); /\s+$/.test(" ".repeat(65536) + "a"); console.timeEnd(); 結構時間がかかるのがわかる。でも /\s+$/ を見て「これは危険だな」と理解出来る人はそんなにいない。JavaScript に限らないけれど。 — Takuo Kihira (@tkihira) February 17, 2022 これは一般に ReDoS (Regular expression Denial of Service) と呼ばれる脆弱性です。正確に理解するのが難しい脆弱性なので、少し解説してみたいと思います。 結論 長い記事になるので、最初に「とりあえずこれだけ知っ

            • 正規表現入門決定版 - Qiita

              1. はじめに この記事はNuco Advent Calendar 2022の12日目の記事です。 1-1. 対象者 この記事は ・正規表現に触れたことがあるけど、結局なんだったのかわかっていない ・正規表現の考え方にイマイチ慣れない ・正規表現って美味しいんですか? というような正規表現初心者の方に向けて書いています。 1-2. この記事を読むメリット 大きなメリットとしては「正規表現の考え方」を身につけることができるはずです。 また記事の最後では正規表現のサンプル集、参考記事および練習サイトを紹介しています。 足りない知識をカバーし実際に手を動かすことで身についていくので、この記事と合わせて参考記事を読んだり練習問題にチャレンジしてみてください。 2. 導入知識 2-1. 正規表現のメリット 具体的な話に入る前に、正規表現を使えばどのようなことができるのか紹介します。 正規表現を用いれ

                正規表現入門決定版 - Qiita
              • サクラエディタでよく使う正規表現たち【備忘録】 - Qiita

                よくお世話になっている正規表現ですが、毎日使うものでもないので、なかなか覚えることができず。。。 使う度に検索するものもあるので、自分のための正規表現備忘録を作成することにしました。 データ整理などに使っているだけなので、偏りがあるかもしれません。 全角文字だけ

                  サクラエディタでよく使う正規表現たち【備忘録】 - Qiita
                • シンプル図解: 正規表現の (?= ) とか (?! ) とか (?<= ) とか (?<! ) とか - Qiita

                  入社1年目、趣味は整理整頓、 @pal4de です。 正規表現が大好きです。 先日投稿した記事が好評いただき本当にうれしかったです。もっとたくさんの人に読んでもらいたい!!! さて、上の記事で紹介したのは単語境界 \b でしたが、これは先読み/後読みを駆使して下記の通りに表せると紹介しました。 便利な\bですらショートハンドに過ぎず、真に強力なものは 先読み(?=...)と後読み(?<=...) だということを主張したい!!! わかりすい図解も添えましたので、是非お楽しみください🏝️ 正規表現の記号は4種類 先読みの紹介に入る前に、改めて正規表現を俯瞰してみましょう。 誤解を恐れずに言えば、正規表現に出てくる記号の種類は4つしかないといえます1 2。 このようにとらえてみると、正規表現と向き合うのがだいぶ楽になります。体系化された理解への第一歩ですね 🗿 図にもある通り、 行頭 ^ も

                    シンプル図解: 正規表現の (?= ) とか (?! ) とか (?<= ) とか (?<! ) とか - Qiita
                  • 覚えれば一生もの! ウェブエンジニアのための正規表現活用入門 - ICS MEDIA

                    正規表現は文字列の検索や置換を行うための強力で便利なツールです。基本をマスターすれば開発から日常の事務作業までさまざまな場面でラクをできる魔法の道具ですが、見た目がちょっと分かりづらいので、避けている方もいるのではないでしょうか? 筆者の個人的観測ですが、とりわけフロントエンドのエンジニアには正規表現に苦手意識を感じている方が多いようです。 この記事では正規表現の基本と、正規表現がどこで使えてどれだけ便利になるのかを紹介します。 正規表現の基本:正規表現ってそもそも何? 正規表現(regular expression)は、ごく簡単にいえば「さまざまな文字列のバリエーションをひとつの文字列で表現したもの」です。たとえば、郵便番号の7桁の数字には(実際に使われていないものも含めれば)一千万通りのバリエーションがありますが、正規表現を使えば次のようにひとつの文字列で表現できます。 ▼「7桁の数字

                      覚えれば一生もの! ウェブエンジニアのための正規表現活用入門 - ICS MEDIA
                    • 「正規表現一覧表がパクられた」――DeNAのRPAサービスで個人ブログからの無断転載が発覚 取り下げに

                      「自分のサイトの正規表現一覧表がパクられた」──DeNAが運営するWebサイト内で、自分が作成した表が無断転載されているというツイートが物議を醸している。投稿者で、個人でWebサイトを運営するむらしゅん(@murashun)さんは10月30日、DeNAのRPAサービス「Coopel」で、自身のブログで掲載した図表と全く同じものが掲載されているのを見つけたという。 ツイートされた画像には、むらしゅんさんが作成したという正規表現一覧表と、同じ文言や順番で説明していることや、具体例については一部をCoopelに置き換えて表現していることが確認できる。むらしゅんさんの運営するWebサイトには、同サイト内の著作権について説明するページに設けており、転載許可については別途問い合わせをするよう提示していた。

                        「正規表現一覧表がパクられた」――DeNAのRPAサービスで個人ブログからの無断転載が発覚 取り下げに
                      • 「正規表現ぐらい覚えてないの?」と言われ痛感したレベルの差 脳内でプログラミングを完結させる天才プログラマー

                        「シリエン戦隊JUN TV」は、現役エンジニアである酒井潤氏がシリコンバレーにおける、働き方やキャリアなどの情報を届けるチャンネルです。今回は、酒井氏が今まで一緒に働いてきた中で出会った天才プログラマー3人について。全2回。後半は、酒井氏がレベルの差を痛感した韓国人天才プログラマーについて。 「正規表現ぐらい覚えてないの?」と言い放った天才 酒井潤氏:3人目は韓国の方で、その方もやはり異常にプログラムができました。 昔、「OpenFlow」というネットワーク関係のルーティングを処理するプロジェクトがあって、その時に私も彼と一緒にPythonを使ってネットワークのルーティング系統の部分のプログラムを書いていました。 ネットワーク関係のプログラムを書く時は、RFCやIEEEとか、プロトコルにしろネットワークのやり方にしろ、世界で決められた標準がドキュメントのかたちになってWebに上がっているん

                          「正規表現ぐらい覚えてないの?」と言われ痛感したレベルの差 脳内でプログラミングを完結させる天才プログラマー
                        • アイヌ語仮名「ㇷ゚」に対する正規表現の罠

                          導入 アイヌ語は日本語と異なり、閉音節(子音で終わる音節)も存在するので、表記の際音素文字であるラテン文字なら、そのまま p, t, k, m, n, s, r などの子音文字を後ろの付ければ良いわけなので、アイヌ語ローマ字表記では、何も問題が生じない。しかし、元々開音節言語である日本語に特化したカタカナのような仮名文字で表記する際、鼻音 n は「ン」でなんとかなる(実はそれでもまずい事になっているけどここでは割愛する)が、p, t, k, m, n, s, r, h はどうしようもないので、特殊の捨て仮名(小書き仮名文字)を利用することになっている。 具体的には以下のような特殊仮名文字(通称 アイヌ語仮名)である。 ㇷ゚ -p ッ -t ㇰ -k ㇺ -m ㇱ -s ㇻ -(a)r, ㇼ -(i)r, ㇽ -(u)r, ㇾ -(e)r, ㇿ -(o)r お分かり頂けただろうか… 問題 r

                            アイヌ語仮名「ㇷ゚」に対する正規表現の罠
                          • 正規表現を使ってモンスターを討伐していくゲーム「Regex Hunting」をプレイしてみた

                            さまざまな要素を含む文字列を1つの文字列で表現できる「正規表現」を、楽しみながら学んでいけるゲーム「Regex Hunting」が登場したので、実際にプレイしてみました。 Regex Hunting https://www.regex-hunting.com/ サイトにアクセスしたら「Start」をクリック。 するとサイト下部へとスクロールし、3種類のクエストが表示されます。まずは初級編の「スタート」をクリック。 ゲーム開始前に、正規表現の説明をスライドで確認できるので、右下の三角アイコンをクリックするか、カーソルの右キーを押します。 説明の一例が「文字クラス」。[acz#]と表記すると「a」「c」「z」「#」のいずれか1文字にマッチします。アルファベットが連続しているようであれば[a-z]とすれば小文字のaからzまで、[B-X]なら大文字のBからXまでにマッチする、という風に、正規表現初

                              正規表現を使ってモンスターを討伐していくゲーム「Regex Hunting」をプレイしてみた
                            • 君たちは正規表現におけるインド数字の罠にハマったことはあるかい?(١٢٣٤٥٦٧٨٩) - Qiita

                              import re re.match(r'\d{4}-\d{2}', '٢٠٢٢-٠٦') Pythonで書いてはいますが、内容を補足します。「'٢٠٢٢-٠٦'」という文字列が、数字4文字+ハイフン+数字2文字にマッチするかどうか、という正規表現を書いています。 一見するとどう見ても数字4桁ではないので、正規表現にマッチしないように見えますよね???? 実は正規表現にマッチします!!!というのが今回の記事の内容になります。 そもそも正規表現における数字の扱いとは 今回はPythonの正規表現のライブラリを利用しているので、公式のリファレンスを見てみましょう。 該当の部分には以下のような記述があります。 \d Unicode (str) パターンでは: 任意の Unicode 10 進数字 (Unicode 文字カテゴリ [Nd]) にマッチします。これは [0-9] とその他多数の数字を

                                君たちは正規表現におけるインド数字の罠にハマったことはあるかい?(١٢٣٤٥٦٧٨٩) - Qiita
                              • Cloudflare、ファイアウォールに追加した「正規表現のミス」が全面的なCDNダウンの原因と報告。「キルスイッチ」で解除 - Publickey

                                Cloudflare、ファイアウォールに追加した「正規表現のミス」が全面的なCDNダウンの原因と報告。「キルスイッチ」で解除 日本時間で昨夜11時50分頃から約30分のあいだ、CloudflareのCDNが全面的にダウンし、同社のサービスを利用していたWebサイトなどが影響を受けた問題について、同社はブログを更新。 今回のCDNがダウンした原因は、ファイアウォールに追加した新ルールの中に正規表現のミスが含まれていたためであることを明らかにしました。 参考:CloudflareのCDNが全面的に約30分ダウンし、世界中のWebサイトが影響を受ける。原因はソフトウェアの動作不良。ロールバックで対応 ファイアウォールに新ルールを追加したことが引き金に 同社のCDNにはWebアプリケーションファイアウォールの機能があり、新たにこのファイアウォールに追加したルールの中に間違いが含まれていたことがCP

                                  Cloudflare、ファイアウォールに追加した「正規表現のミス」が全面的なCDNダウンの原因と報告。「キルスイッチ」で解除 - Publickey
                                • 正規表現でガチャを回せる投稿サイトを作った話

                                  (映像もつくりました) 正規表現ガチャ(英語名:Regech)という、正規表現から生成されるランダムな文字列でガチャを引ける投稿サイトをNext.jsで個人開発した話です。 筆者について 今までPHPやjQueryで開発をしてきた19歳です。 制作期間は20日ほどです。 もしよければ、読んで・遊んでいってもらえたら嬉しいです! つくったもの 正規表現にマッチするランダムな文字列を生成するアプリです。 例:(にゃん?)+→にゃにゃんにゃんにゃ おもしろいガチャができたら投稿することでみんなで遊べるようになります。 ぜひ、おもしろいガチャを作って投稿してください! 正規表現の学習にもおすすめです。 英語対応もしてみたので英語環境からアクセスするか、/en/にアクセスすると英語でも見れます。 私のおすすめガチャ 私のおすすめです。他にもおもしろいガチャが投稿されているので遊んでみてください! リ

                                    正規表現でガチャを回せる投稿サイトを作った話
                                  • Mozilla、今後はV8の正規表現エンジンをFirefoxにそのまま取り込むと表明。そのための互換レイヤを開発

                                    Mozilla、今後はV8の正規表現エンジンをFirefoxにそのまま取り込むと表明。そのための互換レイヤを開発 WebブラウザにはJavaScriptを実行するためのJavaScriptエンジンが搭載されています。それはChromeであれば「V8」、Firefoxであれば「SpiderMonkey」と呼ばれ、それぞれのWebブラウザベンダがECMAScriptの標準に準拠したうえで独自に実装しています。 そしてJavaScriptは以前から正規表現の機能を備えているため、正規表現を解釈し展開するための正規表現エンジンもそれぞれのWebブラウザベンダが実装を行っていました。 その正規表現エンジンについてMozillaは今後、V8の正規表現エンジンのコードをそのままFirefoxのSpiderMonkeyに取り込むようにすると表明しました。 Mozillaはこれを実現するため、V8用の正規表

                                      Mozilla、今後はV8の正規表現エンジンをFirefoxにそのまま取り込むと表明。そのための互換レイヤを開発
                                    • 正規表現とセキュリティ / Regular Expressions and Their Security-Related Aspects

                                      2020/03/15 にお茶の水女子大学内でセキュリティ・キャンプ (https://www.security-camp.or.jp/) の宣伝をした際に、それに合わせて小さな講義を提供しました。これはその発表資料です。 --- 誤りを見つけたら、Twitter (https://twitter.com/lmt_swallow) の DM かポートフォリオサイト(https://shift-js.info/) で示されているメールアドレスまでご連絡ください。

                                        正規表現とセキュリティ / Regular Expressions and Their Security-Related Aspects
                                      • 正規表現ミスって一晩誰もサービスにログインできなくしてしまった話 - Qiita

                                        はじめに この記事は、本番環境などでやらかしちゃった人 Advent Calendar 2023の11日目です。 どうも、@_tinojiと申します。実に4年ぶりにアドベントカレンダーに参加しました。 正規表現で1文字消し忘れて、なんぴとたりともサービスにログインできない状態にしてしまったという話をします。正規表現にはまじで気をつけましょうという教訓になれば・・・ 犠牲となったログイン画面 とあるtoBなWebサービスを開発していたときの話です。法人のユーザーが使う管理画面的なイメージです。 当然ログイン機能があって、至って普通なログインなのですが1つだけ特徴がありまして、ログイン画面のURLをアカウントごとに変えています。https://example.com/<uuid>/loginみたいな感じですね。 あまり見ない形式ではありつつも、個別のUUIDを特定されない限りログイン画面に対し

                                          正規表現ミスって一晩誰もサービスにログインできなくしてしまった話 - Qiita
                                        • GitHubがコード検索を強化。正規表現対応、プログラミング言語別、組織やリポジトリ、ファイルパスなど範囲指定、高速な結果表示

                                          GitHubがコード検索を強化。正規表現対応、プログラミング言語別、組織やリポジトリ、ファイルパスなど範囲指定、高速な結果表示 GitHubは検索機能を刷新し、新たに強化したコード検索機能「https://cs.github.com」のテクノロジープレビューを公開しました。 Check out the technology preview for GitHub code search, the next iteration for search, discovery, and navigation on GitHub. https://t.co/DcV1RAwNXs pic.twitter.com/ua97dyff7h — GitHub (@github) December 8, 2021 新しいコード検索機能では正規表現に対応したほか、特定のプログラミング言語を対象にすること、特定の組織

                                            GitHubがコード検索を強化。正規表現対応、プログラミング言語別、組織やリポジトリ、ファイルパスなど範囲指定、高速な結果表示
                                          • Vimmerに捧げる正規表現の基礎中の基礎 — KaoriYa

                                            正規表現はVimに限らずコンピューター上でのテキスト操作において非常に強力です。 しかし学習の難しさも非情で多くのIT技術者、Vimmerが正規表現に苦しんでいるのを幾度となく目の当たりにしています。 ただ正規表現は本当にそんなに難しいのでしょうか。 いいえそんなことはありません。 正規表現は本来とても簡単な原理で学習も容易なのです。 にも関わらず難しいと思われてしまうのは、原理を理解しないまま外見上の機能をそのまま覚えようとするからです。 本記事では正規表現の原理にフォーカスし解説することで、Vimを含む様々な正規表現実装の利用難度を適切にしようという記事です。 本記事は Vim Advent Calendar 2019 の1日目の記事です。 「正規表現」はもともと形式言語という言語学の一分野の研究から生まれました。 言語学というのは言葉を科学的に研究する学問です。 形式言語はその中でも

                                            • 正規表現でのURLのチェックとバイパス | 技術者ブログ | 三井物産セキュアディレクション株式会社

                                              最近はMBSDでWebアプリケーションスキャナの開発をしている寺田です。 Webアプリケーションを開発していると、セキュリティの観点でURLをチェックしなければならないことがしばしばあります。本日の記事では、そのようなURLのチェックを如何に行うか、正規表現を使う場合の注意点や、バイパス方法などについて書きたいと思います。 本記事で想定するのは、ブラウザからパラメータとして来るURLをチェックしてリダイレクトやリンクのURL等として使ったり、ブラウザから来たOriginヘッダ等のURLをチェックしてアクセス制御をするケースです。その中でも、以下のようにサブドメイン部分(★の部分)を可変にする状況を主に想定します。 https://★.example.jp/… よく使われてそうなチェック用の正規表現と、そのバイパスは以下のとおりです。 正規表現: ^https://.+\.example\.

                                                正規表現でのURLのチェックとバイパス | 技術者ブログ | 三井物産セキュアディレクション株式会社
                                              • その正規表現の書き方で大丈夫? ReDoS 攻撃の怖さと対策方法 | yamory Blog

                                                ReDoS は、脆弱な正規表現を利用することで起こる DoS のひとつです。正規表現の記述は難しく、誤った記述をしてしまうと ReDoS の影響を受ける恐れがあります。本記事では ReDoS の概要から対策方法まで解説していきます。

                                                  その正規表現の書き方で大丈夫? ReDoS 攻撃の怖さと対策方法 | yamory Blog
                                                • RubyKaigi 2023での発表の「2進数の足し算を計算する正規表現」の解説

                                                  RubyKaigi 2023で「Make Regexp#match much faster」という発表をします、@makenowjust です。この発表では、ReDoS対策のためにRuby 3.2で導入された、正規表現マッチング (Regexp#match) の メモ化による最適化 について解説します。 さて、発表の中に次のようなスライドがあります。 このスライドはRubyの正規表現がいかに強力かを説明するためのもので、例として「2進数の足し算を計算する正規表現」を示しています。 また、このツイートで使っている正規表現も、実はこの正規表現です。 今回の記事では、この「2進数の足し算を計算する正規表現」の解説をしていきたいと思います。 「2進数の足し算を計算する正規表現」 コピペがしやすいように、スライドの画像ではなくテキストのコードで上の正規表現を出しておきます。 RE = /(?<s>[

                                                    RubyKaigi 2023での発表の「2進数の足し算を計算する正規表現」の解説
                                                  • 正規表現を学んでみませんか | さくらのナレッジ

                                                    それぞれの意味については使っているうちに自然と身につくかと思います。無理に急いで丸暗記しなくても良いです。 ほかにもたくさんあります。また、使用するツールやプログラム言語によって異なる場合があります。 実践 ディレクトリだけを一覧表示 例えば /etc 以下のファイルを一覧で表示させ、その中からディレクトリ(フォルダ)であるものを表示させたい場合、以下のようにします。 % ls -l /etc | grep '^d' 実行結果(例) % ls -l /etc | grep '^d' drwxr-xr-x 2 root root 4096 Apr 11 06:01 ImageMagick-6 drwxr-xr-x 1 root root 4096 Apr 11 06:02 alternatives drwxr-xr-x 1 root root 4096 Apr 11 06:02 apache

                                                      正規表現を学んでみませんか | さくらのナレッジ
                                                    • 20日目: 正規表現が ReDoS 脆弱になる 3 つの経験則

                                                      はじめに 皆さんこんにちは.3回生のらん(@hoshina350)です. 文字列マッチングに便利な正規表現ですが,テキトーに書くと脆弱になり得るという情報を耳にしてから色々と原因や対策を調べていました. しかし,多くの記事で紹介されていた対策方法は,「独自の正規表現を使用しないー」とか「 * や + などの繰り返し表現はなるべく使わないー」とかいう なんともふわっとしたものでした.これでは「いやぁ確かにそうなんかもしれんけど…そうゆう訳にはいかんやんか…」と納得できません. つまり,「本質的に何が問題」で,「具体的にどんな特徴のある正規表現が脆弱になり得るのか」を知りたい訳です. そこで,様々な文献を調査してみました.本記事では調査して溜まった知見を紹介していきます. 本記事は, Purdue大学のJames Davis教授による “The Regular Expression Denia

                                                        20日目: 正規表現が ReDoS 脆弱になる 3 つの経験則
                                                      • はじめに - 作って学ぶ正規表現エンジン

                                                        はじめに 正規表現は様々なプログラミング言語で利用されている、テキスト処理のためのパターン言語です。 正規表現はテキストエディタでの検索や置換、入力文字列のバリデーションなどプログラミングの様々な分野で実用されています。 ある程度の規模のプログラムにおいて、正規表現を全く利用しない (利用していない) ということはほとんど無く、正規表現は今日のプログラミングにおいて非常に重要なパーツだと言えます。 JavaScriptやRubyといったプログラミング言語では正規表現はファーストクラスのリテラルとして実装されているため、とても簡単に利用できます。 例えば次のRubyプログラミングでは変数fooに入った文字列の部分にfizzかbuzzが含まれるかどうかを、正規表現/fizz|buzz/を使ってチェックしています。 foo =~ /fizz|buzz/ さらに、計算機科学 (コンピューターサイエ

                                                        • なぜGo言語の正規表現は遅いと言われるの? - Qiita

                                                          はじめに Goの正規表現は遅いと言われていることが以前から疑問だったので調査してみました。 こちらの記事やこちらの記事を拝見する限り ① 現実的なユースケース(例えばURLのパースなど)ではGo言語の正規表現は使うべきではなく、stringsパッケージの標準の関数を利用した方がパフォーマンスとしては良い。 ② Go言語で正規表現を利用するために必要な"正規表現オブジェクト"を並行にアクセスするにはパフォーマンスが問題になるので注意が必要。 とあります。その理由は、それぞれ以下に集約できるようです。 ① Go言語標準の正規表現ライブラリは、正規表現と検査文字列の長さに対して常に$O(n^2)$のオーダーで計算量が増加する安定したアルゴリズムを採用している。 ② "正規表現オブジェクト"を用いたマッチング処理には排他制御が行われている。 調べてみる Go言語のpkg/regexpの公式ドキュメ

                                                            なぜGo言語の正規表現は遅いと言われるの? - Qiita
                                                          • はや(・ε・)ぶさ on Twitter: "G社内のコード検索ツールは何十億行もあるmono repo にもかかわらず正規表現による検索結果が一瞬で返ってくるのがヤバくて、どういう実装なのか気になってたのだけど Russ Cox がオープンな記事を書いてたのを見つけた。これ… https://t.co/MI5xYCtvjD"

                                                            G社内のコード検索ツールは何十億行もあるmono repo にもかかわらず正規表現による検索結果が一瞬で返ってくるのがヤバくて、どういう実装なのか気になってたのだけど Russ Cox がオープンな記事を書いてたのを見つけた。これ… https://t.co/MI5xYCtvjD

                                                              はや(・ε・)ぶさ on Twitter: "G社内のコード検索ツールは何十億行もあるmono repo にもかかわらず正規表現による検索結果が一瞬で返ってくるのがヤバくて、どういう実装なのか気になってたのだけど Russ Cox がオープンな記事を書いてたのを見つけた。これ… https://t.co/MI5xYCtvjD"
                                                            • 正規表現の勉強で役に立ちそうなリンク

                                                              りゅうりゅう@VBAer × ココナラPRO認定 @blacklist_ryu 書籍「マンガでわかる正規表現」に公開されてた正規表現チェッカーのサイト。 ただ、これは一般的な正規表現で、VBAで使えるのとは違う部分もあるので、ちゅんさんの正規表現関数を流用させていただいて、同様のものをExcelで作成中! ymori.com/regexcheck/ pic.twitter.com/uJhO4DIzPn 2021-03-21 15:39:02

                                                                正規表現の勉強で役に立ちそうなリンク
                                                              • GitHubのCTOも注目する「grep.app」は正規表現を使ってGitHubリポジトリが検索できる

                                                                grep.app https://grep.app/ 「grep.app」は、正規表現を使ってGitHubリポジトリを検索できるWebサービスです。 まだローンチしたてということで、検索できるリポジトリ数は50万。全体で1億リポジトリを抱えるGitHubにおいてはまさに一部のみであるが、本家GitHubのCTOも注目するサービスとあって話題にのぼっています。 GitHubリポジトリを検索してみる 機能はいたってシンプル。Regular expressionにチェックをつけて、正規表現で検索するだけ ヒットしたリポジトリ結果をみることができます。 例えば、このように通常のAnd検索にしにくい場合であっても、簡単に引くことができます。 Hacker News Jason Warner氏もクールな仕事っぷりを称賛しています。 もし、正規表現で困ったら・・・ 便利な検索ツールも、最大の課題は、正規

                                                                  GitHubのCTOも注目する「grep.app」は正規表現を使ってGitHubリポジトリが検索できる
                                                                • 正規表現のポテンシャルを引き出す自作関数3選 [Python] - Qiita

                                                                  はじめに 文字列処理に関する3種類の自作関数を紹介します。 具体的には、主に以下の2点を目的としています。 ・正規表現の円滑な適用 ・英字 / かな / カナ / 漢字 / 数字 の識別 ☆ 02/26 時点で全体構成を刷新しました。 下準備

                                                                    正規表現のポテンシャルを引き出す自作関数3選 [Python] - Qiita
                                                                  • 正規表現を用いる際のパフォーマンスチェックリスト - ヤドカリラボ

                                                                    Python で正規表現を書いて分析や機械学習のモデル構築、予測に活用する際には、正規表現実行時のパフォーマンスが足かせとなる場合があります。 正規表現の処理に用いられる実行時間がどのくらいになるかはテキストデータの分量や機械学習モデルの精度検証の実行回数に応じて変わってきます。 一つのテキストデータに対する正規表現の実行時間を少なくすることで、タスクによっては全体として大幅な処理時間の短縮が見込まれます。そのことによって精度検証を素早く回したり、テキスト処理実行時の前処理の実行時間を削減する等の効果が得られます。精度検証の間の実行待ち時間やバッチ・キューによる予測時の時間が減り、最終的には精度向上の機会の向上やサービスのユーザ体験の向上に繋がるというわけです。 本記事では Python を用いた場合の正規表現のパフォーマンス改善候補についてリストアップし、具体的な対応方法について見ていき

                                                                      正規表現を用いる際のパフォーマンスチェックリスト - ヤドカリラボ
                                                                    • キャッシュによるRubyの正規表現のマッチングの高速化の紹介 - クックパッド開発者ブログ

                                                                      9月からRuby開発チームにインターンシップとして参加している@makenowjustです。 総合研究大学院大学の学生で、普段は情報セキュリティに関する研究をしています。 インターンシップでは、キャッシュ (メモ化) を利用したRubyの正規表現の高速化を行いました。 ReDoSと呼ばれる、バックトラックが爆発することでマッチング時間が膨大になる脆弱性があります (ReDoSについては、拙作ですがWEB+DB PRESSに掲載された記事があります)。 近年、ReDoSは多く報告されており、Rubyもその例外ではありません (参考1、参考2)。 今回実装した最適化は、ReDoSを防ぐことを目的としたもので、多くの正規表現のマッチング時間が文字列の長さに対して線形となります。 ReDoSが起こる正規表現の例として、/^(a|a)*$/が挙げられます。 今回の修正の前後での実行時間を比較すると、

                                                                        キャッシュによるRubyの正規表現のマッチングの高速化の紹介 - クックパッド開発者ブログ
                                                                      • Goの正規表現が遅いって言う人がいたから、(速い)正規表現エンジンを作ったよ

                                                                        はじめに 「Goの正規表現は遅い」 そんなふうによく言われていました。(最近はあまり聞かなくなりましたが) たとえば、↓の記事ではPythonの正規表現と比較して1.5倍くらい遅いという結果になっています: この話には「Goの正規表現は最悪時間が短くなるように安定したアルゴリズムを採用しているから」という回答があります: ↑の記事の比較では、GoがPerlに対して約10倍以上高速という結果が出ているので、「Goの正規表現は遅くない!はい、論破ー!」というわけですね。 なんでこうなるのかも↑の記事で説明されているとおりですが、Perl(などのバックトラック型エンジン)が入力長に対して指数関数的に実行時間が伸びていくのに対し、Goの正規表現エンジンは入力長に対して線形時間で実行時間が伸びていくアルゴリズムを採用しているため、入力が長くなると急激にGoのほうが有利になるからです: 一方で、入力が

                                                                          Goの正規表現が遅いって言う人がいたから、(速い)正規表現エンジンを作ったよ
                                                                        • Ruby の正規表現で素数かどうかを確認する方法

                                                                          Ruby の正規表現で素数かどうかを確認する方法 作成日 2018.09.11 更新日 2018.09.13 Regex Ruby Ruby の正規表現を使って, 素数かどうかを確認するメソッドを作ってみました. パフォーマンスは正直全然良くないのですが, 余興の様なものとしては面白いのではないかと思います. 正規表現の説明もします. そもそも素数というのは, どの様な数なのでしょうか. Wikipedia によりますと次のように定義されています: 素数(そすう、英: prime number)とは、1 より大きい自然数で、正の約数が 1 と自分自身のみであるもののことである。正の約数の個数が 2 である自然数と言い換えることもできる。 なので 0, 1, 4, 6, 8, 9, 10, 12 といった数は素数ではなく, 2, 3, 5, 7, 11, 13 といった数が素数になります.

                                                                          • 今度、入社するITエンジニアの趣味欄に「正規表現」とだけ書いてあって「おいおい……やべぇ『逸材』が来たぞ……😨」って部署内が騒然としてる。

                                                                            いぐぞー ✈️ 旅するプログラマー @igz0 旅とプログラミングをこよなく愛します。 アメリカ大陸🇺🇸を横断しました!!小学生からプログラミング→新卒SIer→Webに目覚め個人事業主兼会社員。テレビ出演経験あり。 Webサービスを作りました。AI・VRに没頭中。IT関連中心にツイートします!!アイコンは@ixy先生より利用許諾済み。Amazonアソシエイト。 note.com/igz0/

                                                                              今度、入社するITエンジニアの趣味欄に「正規表現」とだけ書いてあって「おいおい……やべぇ『逸材』が来たぞ……😨」って部署内が騒然としてる。
                                                                            • ソースコード生成AI「AI Programmer」が対応言語を拡充、正規表現や日本語解説にも対応/PHP、Go、Haskell、Lisp、C#などを新たに習得

                                                                                ソースコード生成AI「AI Programmer」が対応言語を拡充、正規表現や日本語解説にも対応/PHP、Go、Haskell、Lisp、C#などを新たに習得
                                                                              • プログラム中の文字列抽出機能を自動修正する技術を世界に先駆けて実現~専門知識をもたない開発者でも正規表現の修正が容易に~ | ニュースリリース | NTT

                                                                                日本電信電話株式会社(本社:東京都千代田区、代表取締役社長:島田 明、以下「NTT」)と学校法人早稲田大学(本部:東京都新宿区 理事長:田中愛治 以下、「早稲田大学」)は、情報漏洩やサービス停止の原因となりうる文字列抽出機能の誤りを自動修正する技術を世界で初めて実現しました。Webサービスにおけるユーザの入力値などから任意の文字の並び(文字列)を抽出する場合、一般的に文字列パターンを表すために正規表現(※1)と呼ばれる記法が利用されています。正規表現は複雑な文字列パターンを簡潔に記述可能である反面、非常に難解であり、誤った記述が修正されないまま残っている事例が確認されています。 本技術により、専門知識を持たない開発者でも正規表現の誤りを自動修正することが可能になるため、安全なサービスの実現が期待できます。 本技術の詳細は、2023年6月17日に開催されるプログラミング言語分野の最難関国際会

                                                                                  プログラム中の文字列抽出機能を自動修正する技術を世界に先駆けて実現~専門知識をもたない開発者でも正規表現の修正が容易に~ | ニュースリリース | NTT
                                                                                • ワイの正規表現入門 - Qiita

                                                                                  とあるWeb制作会社にて ワイ「社長、こないだ頼まれたショッピングサイトの件なんですけど」 ワイ「ご注文フォームのコーディング、完了しましたで!」 社長「おお、ありがとうな」 ワイ「ほな、飲みに行ってきますわ!」 社長「・・・いや待てや(まだ15時やし)」 社長「何やこのフォーム」 ワイ「何ですかいな」 ワイ「デザイン通り、完璧にコーディングできてますやん」 社長「いやバリデーションが全くされとらへんがな」 ワイ「グラデュエーション?」 ワイ「何を卒業するんでっか」 社長「バリデーションや」 社長「貴様をこの会社から卒業させたろか」 バリデーションとは 社長「バリデーションちゅうのは、不正な値やないかどうか確認することや」 社長「例えば数字を入力してほしいフォームに、文字列を入力して送信されても困るやろ?」 社長「そういうのをちゃんとチェックするのがフォームバリデーションや」 ワイ「あ、あ

                                                                                    ワイの正規表現入門 - Qiita