タグ

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

  • 正規表現の"正規"とは何か気になったら正規表現の歴史を紐解くことになってしまった話

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

    正規表現の"正規"とは何か気になったら正規表現の歴史を紐解くことになってしまった話
  • 心のバリアを取り去って「正規表現」に取り組む一歩を踏み出すためのメモ|DTP Transit 別館

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

    心のバリアを取り去って「正規表現」に取り組む一歩を踏み出すためのメモ|DTP Transit 別館
  • 正規表現が嫌いな人のための正規表現チートシート・「I Hate Regex」

    I Hate Regexは正規表現が嫌いな人の為に作られた正規表現チートシートです 任意のキーワードで目的を探す事ができて、目的の項目を選ぶと図式で解説しつつコードや実装例も出してくれます 更に使われた式の使用例も書かれているので調べつつ学べるようになっています 例えば電話番号をマッチさせたい場合は上記のページで学べる、といった感じです 目的で探せて、調べると同時に学んだり理解できるようになっている、まさに嫌いな人の為のチートシートですね アプリはソースコードも公開されていますので特に学びやすいかなぁと思います。ライセンス明記は無いみたいなので商用利用する際は開発者に問い合わせください I Hate Regex

    正規表現が嫌いな人のための正規表現チートシート・「I Hate Regex」
  • はじめての正規表現とベストプラクティス#1: 基本となる8つの正規表現

    更新履歴 2018/10/11: 初版公開 2020/11/12: 追記・更新 1: 基となる8つの正規表現(記事) 2: 正規表現とは何か/ワイルドカードとの違い 3: 冒頭/末尾にマッチするメタ文字とセキュリティ、文字セットの否定と範囲 4: 先読みと後読みを極める 5(特別編)|と部分マッチのワナ 6: 文字セットのショートハンド 7: Unicode文字ポイントとUnicode文字クラス 8: 対象の構造を意識した「適度にDRYな」書き方 9: .*や.+がバックトラックで不利な理由 10: 危険な「Catastrophic Backtracking」前編 こんにちは、hachi8833です。 BPS社内勉強会で発表したスライドを元に、正規表現を学ぶときに最初に押さえておきたい基的なポイントを入門用にまとめました。説明では主にRubyの正規表現を使っていますが、特定の正規表現

    はじめての正規表現とベストプラクティス#1: 基本となる8つの正規表現
  • 正規表現で空白をマッチさせるときは\sじゃなくて\hのほうが良いのかもしれない。 - 水まんじゅう2

    正規表現で空白文字とマッチさせるときは\sを使用することが多いと思いますが、当に求めているものは\hなのかもしれません。 \s 空白文字: [\t\n\x0B\f\r] \h 水平方向の空白文字: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000] \sはasciiで定義されている空白っぽい文字(改行含む)にマッチしますが、\hはUnicodeで定義されている空白っぽい文字(改行を含まない)にマッチします。 歴史的経緯で\sを使う人も多いですが、改行含んでマッチさせたい場合なんてほとんどないのだから\hを使いましょう。 Javaの正規表現の一覧は以下から(※ほぼPerl互換) docs.oracle.com

    正規表現で空白をマッチさせるときは\sじゃなくて\hのほうが良いのかもしれない。 - 水まんじゅう2
  • regxr - macOS用の正規表現チェッカー

    MOONGIFTはオープンソース・ソフトウェアを紹介するブログです。2021年07月16日で更新停止しました プログラマといえども難しいのが正規表現です。プログラミング言語によって方言もありますし、マッチした後の変換などでつい指定を間違えてしまったりします。Atomなどはマッチした部分が置換前にハイライトされますが、Emacsなどはそんな機能もないので何度もミスしてしまいます。 そこで使ってみたいのがregxrです。macOS用の正規表現チェッカーです。 regxrの使い方 上に正規表現、下にサンプルになるテキストを記述します。マッチした場所がハイライトするので分かりやすいです。 反映はリアルタイムに行われます。 正規表現の練習に良いですね。 regxrはSwift製なので、適用される正規表現はSwiftで使えるものになるでしょう。プログラムに組み込む前に正規表現を試したり、思ったマッチに

    regxr - macOS用の正規表現チェッカー
  • あなたの知っている正規表現はもう古い! 正規表現の新常識(ES2018編) - Qiita

    2018年1月23日から25日にかけて、TC39の第62回ミーティングが行われました。TC39のミーティングでは、提案されているECMAScriptの新機能 (proposal) について審議し、各proposalのステージの移動を決定します。 今回のミーティングでは正規表現に関する幾つかのproposalがStage 4になりました。Stage 4になったproposalはES2018に組み込まれ、JavaScript (ECMAScript) に正式採用ということになります。 この記事では、JavaScriptに追加された正規表現の4つの新機能を紹介します。 s (dotAll) flag for regular expressions Proposal: https://github.com/tc39/proposal-regexp-dotall-flag 正規表現の新たなフラグとし

    あなたの知っている正規表現はもう古い! 正規表現の新常識(ES2018編) - Qiita
  • 無料&登録不要で正規表現を図示してくれる「Regexper」を使ってみた

    アプリ開発の場面では、入力されたテキスト内に誕生日などの特定パターンの文字列が含まれているかを確認したり、別の文字列に置き換えたりするときに、正規表現は必須です。しかし、正規表現を誤ってしまうと、アプリケーションによっては、データを破壊してしまったり、誤作動を起こすリスクがあるのも事実。このため正規表現を変更する場合、事前に試験用の環境で試すのが普通ですが、開発現場によっては、試験用の環境であっても簡単に適用できない場合や、番用の環境しかないなど、試す場面が限られることが考えられます。このとき、机上での検証を行いますが、人の手による検証は、どれだけ実力のある人がチェックしても誤るリスクがあり、不安を拭うことはできません。「Regexper」を使えば、入力した正規表現を無料で、機械的に図示して、読みやすくしてくれるとのこと。複雑な正規表現を入力しても読みやすくなるのか、実際に使ってみました

    無料&登録不要で正規表現を図示してくれる「Regexper」を使ってみた
  • 正規表現のデバッグに重宝した神サイトを紹介してみる | DevelopersIO

    はじめに こんぬづは、バーチャルYoutuberの中では圧倒的に輝夜月ちゃんが好きな田中です。特にクリスマスのやつが好きです。 さて今回は、今年正規表現のデバッグに重宝した Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript を紹介します。 Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript サイトはこんな感じ。 以下のような特徴があります。 正規表現のデバッグ 記述した正規表現の解説が見れる 正規表現に対して入力した文字列の、マッチした部分が見れる 正規表現のクイックリファレンスがついている たとえば /[a-zA-Z]{0,3}+[0-9]{0,3}/ みたいな正規表現があったとき。マッチして

    正規表現のデバッグに重宝した神サイトを紹介してみる | DevelopersIO
  • 【決定版】中級猫でもわかる正規表現再入門 - KAYAC engineers' blog

    正規表現 初めまして!技術部サーバーチームのダリエンと申します。正規表現は役に立つ知識なので、勉強してみました。 では、正規表現について調べた知識をシェアしたいと思います。 こちらは Tech Kayac Advent Calendar 2017 の25日目の記事になります。 イントロダクション 定義 検索パターンを象る文字列 文字列の集合を一つの文字列で表現する(ja.wikipedia.org) 英語:Regular Expression(s) / Regex 何のために使いますか? ウェブブラウザーエクステンションやIDEやコードなどで: 文字をそのまま検索 (⌘/Ctrl+Fと全く同じ) パターンの一致 ⌘/Ctrl+Fは簡単でしょう? そうです。しかし、パータン一致は? 下のテキストを検討してください: JPY152 JPY40501 USD501 IDR1261 JPY999

    【決定版】中級猫でもわかる正規表現再入門 - KAYAC engineers' blog
  • 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
  • [正規表現] .*?は最短マッチではない - Qiita

    # Ruby 2.4.2 "<<<hoge>>>".match(/<.*?>/)[0] #=> "<<<hoge>" なぜこうなるのか .*?は、 最短マッチ 最左マッチ の2つの原則に従い、しかも最左マッチの原則の方が優先順位としては高いからである。 より嚙み砕いて言うと <.*?>は先頭の<がマッチした後に、そこからマッチする部分をできるだけ最小化しようと試みる。 <<<hoge>>>に対して<.*?>をパターンマッチさせる際に行われる実際の処理の流れは、次のようなイメージになるだろう。 < # <までマッチ << # <>のマッチに失敗、.の数を増やしてリトライ << # <.までマッチ <<< # <.>のマッチに失敗、.の数を増やしてリトライ <<< # <..までマッチ <<<h # <..>のマッチに失敗、.の数を増やしてリトライ <<<h # <...までマッチ <<<ho

    [正規表現] .*?は最短マッチではない - Qiita
  • よく使う正規表現はもうググりたくない! - Qiita

    タイトル通りによく使う正規表現を毎回ググるのが効率悪いのでまとめてみました。各言語で正規表現のサンプルを書いてみました。 正規表現式 Emailアドレス ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ ドメイン名 ^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$ インタネットURL ^(http|https)://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ユーザー名 (Twitter username) ^[a-zA-Z0-9_\-.]{3,15}$ 固定電話 ^0\d-\d{4}-\d{4}$ 携帯電話 ^(070|080|090)-\d{4}-\d{4}$ IP電話 ^050-\d{4}-\d{4}$ フリーダイヤル ^0120-\d{3}-\d{3}

    よく使う正規表現はもうググりたくない! - Qiita
  • 正規表現を学べる&遊べるツールいろいろメモ - Qiita

    はじめに 実際の開発や作業で正規表現を使っていくのが覚えるにも学ぶにも一番とは思いますが、 面白そうなゲームやツールで電車の中でも正規表現が学べそうなものをいくつか見つけましたので メモ程度に紹介します。 手軽でシンプルながら奥深い正規表現のツールで ちょっと燃えるクイズゲームを楽しんでみませんか。 RegEx Generator:ツール スマホアプリです。 条件を選択・入力すると正規表現を作ってくれます。 チートシートもあります。 (画像はGooglePlayより) 正規表現勉強中の方にオススメ、こんなのもあるんだなーとなりますよ。 RegExp playground :ツール ブラウザのツールです。 作ってみた正規表現を試したい時に。 上に正規表現を入力すると、 下に入力された文字列で何がマッチするか可視化してくれる、 テストとしてもゲームとしても楽しいブラウザツールです。 何もマッチ

    正規表現を学べる&遊べるツールいろいろメモ - Qiita
  • JavaScriptの正規表現のコンセプトを理解する(翻訳)|TechRacho by BPS株式会社

    概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Deep Concept Of Regular Expression In JavaScript 公開日: 2017/10/15 著者: Rehmaanali サイト: http://geekstrick.com/ JavaScriptの正規表現は、パターンといくつかのフラグによってできています。フラグはすべて、結果にどのように影響を与えるかを指定するシンプルな論理値になっており、必要に応じてオンまたはオフにします。興味深いできことが起きるのは、もちろんパターンの中であり、実に複雑かつ強力な文字列検索を定義できます。しかしパターンを解説する前に、JavaScriptで正規表現が動作するコンテキストのあたりを説明することにします。 JavaScriptではすべてがオブジェクトになっているので、正規表現もRegExpというオブジェクト

    JavaScriptの正規表現のコンセプトを理解する(翻訳)|TechRacho by BPS株式会社
  • Python の正規表現で IGNORECASE するときは気をつけよう - methaneのブログ

    Python 3 で文字列が Unicode になりました。というだけで感のいい人は分かるかもしれません。 はい、大文字小文字の判断も ASCII じゃなくて Unicode になります。 In [6]: re.match("[a-z]", 'ı', re.I) Out[6]: <_sre.SRE_Match object; span=(0, 1), match='ı'> この文字は LATIN SMALL LETTER DOTLESS I だそうです。 予想外のものにマッチするのは単純にバグになりやすいのもそうですが、この [...] にマッチする部分を作るのも非効率的になります。Python の標準ライブラリの正規表現は最終段階以外が全部 pure Python で書かれているので、正規表現のコンパイルが遅く非効率になります。 なお Python の標準ライブラリの正規表現は文字列だけ

    Python の正規表現で IGNORECASE するときは気をつけよう - methaneのブログ
  • 普通のパズルではない「正規表現クロスワード」がBBCラジオに登場

    文章によるヒントを元にタテヨコに交差したマスに言葉を当てはめてマスを埋めていく「クロスワードパズル」のヒント部分を正規表現にした「正規表現クロスワード」なるものがBBCラジオの「Puzzle for Today」(今日のパズル)に登場しました。 BBC Radio 4 - Today - Puzzle for Today http://www.bbc.co.uk/programmes/articles/5LCB3rN2dWLqsmGMy5KYtBf/puzzle-for-today 2017年7月5日の今日のパズルがこれ。クロスワードパズルですが、マスを埋めるためのヒントが正規表現という、一見すると暗号のようになってます。 例えば、0行目の記載は「[^XZVCHFJLQM]+」。正規表現のルールでは、「^」は「それ以外」を、「[]」は「任意の文字」を、「+」が「前の文字の繰り返し」を意味す

    普通のパズルではない「正規表現クロスワード」がBBCラジオに登場
  • 一歩先 "読む" 正規表現 ~先読みを理解せよ~ - Speee DEVELOPER BLOG

    はじめまして、北の双剣エンジニアです。 このブログにおいては、実は相当前の記事に、写真にちょっぴり映り込んでいました。こうして記事を書くのは初になりますね。 Speeeでどんな事をしているかと申しますと、社内システム開発を中心に、ゴリゴリとバックエンドでコードを書いています。その一方で、フロントエンド側でも、Webページ構築・デザインに(一部ながら)関わっていたりと、双剣の名の通り、ハイブリッドなフィールドが最大の武器です。 こんな側面もあり、自分はエンジニア&デザイナ、両方の観点で見れるような、技術知識の橋渡し的な役目でありたいと思います。どうぞよろしくお願い致します。 今回取り上げるのは、みんな大好き正規表現です。その中でも、『一見ピンとこない、わかりづらい』けど、マスターするとより記述の幅が広がる、『先読み』を解説していきたいと思います。 正規表現 今更説明する必要もないと思いますが

    一歩先 "読む" 正規表現 ~先読みを理解せよ~ - Speee DEVELOPER BLOG
  • [コラム] 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。 - Qiita

    [コラム] 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。regex 正規表現の "先読み" / "後読み" を、分かりにくいと感じるすべての人にお送りします。 --- 追記:2017/06/04 コメントにて、ご指摘を頂いております。 当記事の解釈には誤りがあります。コメントのご指摘内容をご覧いただければ幸いです。 当記事の主旨としては、"先読み・後読み" よりも "ルックアヘッド" の方が、意味を捉えやすいのでは?というものでしたが.. そもそも私の、「lookahead」の解釈(とくに、look の主語はどれなのかという部分だと思います)に、勘違いがありました。 ですので、いまのところ当記事の主題は、「"先読み" でも、"ルックアヘッド” でも、どちらでもよいけど、しっかりと厳密に理解しよう!(反省)」となります。 コメント

    [コラム] 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。 - Qiita
  • 正規表現の先読み・後読み(look ahead、look behind)を活用しよう|TechRacho by BPS株式会社

    これをうまく活用すると、正規表現の苦手な「否定マッチ」のかなりの部分をカバーできます。条件が「部分否定」であれば十分対応可能です。 先の(?<!弱)小会社も、否定後読みによる部分否定マッチです。 参考: 『「先」と「後」はマリオになったつもりで考えよう』もどうぞ。 正規表現は全否定が苦手 よく知られていることですが、「○☓という文字列を含まない行にマッチ」のような投げやりな否定表現は、まともに正規表現で表そうとすると大変なことになってしまいます。 以下はStackoverflowで見つけた事例です。 # "hede"を含まない行にマッチ a =~ /^([^h]*(h([^e]|$)|he([^d]|$)|hed([^e]|$))?)*$/ Rubex: ^([^h]*(h([^e]|$)|he([^d]|$)|hed([^e]|$))?)*$ 正規表現で「〜という文字列を含まない」を表そ

    正規表現の先読み・後読み(look ahead、look behind)を活用しよう|TechRacho by BPS株式会社