タグ

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

  • はじめに - 作って学ぶ正規表現エンジン

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

  • アイヌ語仮名「ㇷ゚」に対する正規表現の罠

    導入 アイヌ語は日語と異なり、閉音節(子音で終わる音節)も存在するので、表記の際音素文字であるラテン文字なら、そのまま 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

    アイヌ語仮名「ㇷ゚」に対する正規表現の罠
  • 正規表現の先読み・後読み

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

    正規表現の先読み・後読み
  • 「バグを意図的にバグのまま残す」という選択肢がある

    はじめに gcc v12.1において、C++の正規表現ライブラリstd::regexに、正規表現のバリデーションを改善するパッチ(以下"改善パッチ"と表記)が取り込まれました。改善パッチによって、これまではバリデーションにひっかからなかった不正な正規表現文字列が"正しく"不正なものと認識されて例外が発生するようになりました。 これだけ聞けばいいことだけのように思えるかもしれませんが、実はそうでもなかったりします。経験豊富なかたであれば見た瞬間ゾッとしたかもしれません。記事では、この一見問題なさそうな改善パッチによって発生しうる問題、および、その具体的例について紹介するとともに、この手のパッチを当てるかどうかは難しい判断になるという知見を共有します。 結論 改善パッチによって発生する問題 発生条件 gcc v12.1以降、あるいは改善パッチをバックポートされた任意のバージョンを使ってC++

    「バグを意図的にバグのまま残す」という選択肢がある
  • 正規表現:文字列を「含まない」否定の表現まとめ | WWWクリエイターズ

    「〜を含まない」といった、否定の意味を持つ正規表現を記述する場合、下記のように、大きく分けて2種類のケースがあります。 「特定の1文字を含まない」といった否定表現か、もしくは「正規表現パターンを含まない」といった表現かで、大きく解決の方針が異なる点に注意して下さい。 特定の1文字だけを否定したい場合は非常にシンプルです。この場合、「文字クラス」、もしくはエスケープシーケンスで表される文字型を利用する事で表現できます。 一方で、特定の正規表現パターンを否定したい場合、少し記述が複雑になります。今回は「否定先読み」を利用した表現を、この記事の後半にご紹介します。 基的な正規表現の記法はこの記事では触れませんので、不安な方はこちらの記事も合わせてご参照下さい: 正規表現とは?基構文とメタ文字一覧(サンプル付) それでは、順番に詳しく見ていきます。 任意の一文字を含まない文字列の正規表現 a「

  • 「正規表現」とは――すぐに使う方法と「ECMAScript」のバージョン

    正規表現とは そもそも「正規表現」とは何でしょうか? それを理解するために、コマンドプロンプトや「Microsoft Word」などにおけるワイルドカードを見直します。 ワイルドカードとは何か? 「ワイルドカード」とは、もともとトランプなどのカードゲームにおける「万能カード」を意味しています。転じて、検索などのグロブパターンに使用される文字をワイルドカードといいます。Windowsのコマンドプロンプトでファイル名を指定するときのアスタリスク(*)とクエスチョン(?)が代表的なワイルドカードで、それぞれ「任意の文字列」「任意の1文字」を意味します。 「*.txt」「?.txt」のように指定すると、それぞれ「<任意の文字列>.txt」「<任意の1文字>.txt」に一致するファイル名を指定できます。ワイルドカードを使うことで、複数のファイル名に共通するパターンを指定することができ、ファイルの検索

    「正規表現」とは――すぐに使う方法と「ECMAScript」のバージョン
  • 正規表現を学んでみませんか | さくらのナレッジ

    それぞれの意味については使っているうちに自然と身につくかと思います。無理に急いで丸暗記しなくても良いです。 ほかにもたくさんあります。また、使用するツールやプログラム言語によって異なる場合があります。 実践 ディレクトリだけを一覧表示 例えば /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

    正規表現を学んでみませんか | さくらのナレッジ
  • 一歩先 "読む" 正規表現 ~先読みを理解せよ~ - Speee DEVELOPER BLOG

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

    一歩先 "読む" 正規表現 ~先読みを理解せよ~ - Speee DEVELOPER BLOG
  • 第58回 正規表現の勘所―わかりづらい記法の覚え方、先読みや後読みの実践(3) | gihyo.jp

    my $intro = "私は牛乳と牛丼が好きです"; $intro =~ s/牛(?=丼)/豚/g; print "$intro\n"; # => 私は牛乳と豚丼が好きです 正規表現牛(?=丼)は、牛の右側に丼がある場合、牛にマッチします。丼は先読み(?=丼)によってマッチに必要な条件ですが、ゼロ幅マッチなのでマッチ文字列には入りません(丼という文字を消費しません⁠)⁠。そのため、マッチ文字列すなわち置換対象文字列は牛となり、結果的に単語牛丼のみ豚丼に置換されます。 この例だとs/牛丼/豚丼/gでも代用できます。しかし、複数の正規表現演算子や文字列関数を駆使しないと実現できなさそうな要望も、先後読みを使うと単一の正規表現で簡潔に書ける場合があります。 先や後はマッチカーソルの動き 初学者が先後読みを学んだ際、「⁠先や後の意味がわからない」と訴える場面をしばしば見かけます。 前項のs/牛(

    第58回 正規表現の勘所―わかりづらい記法の覚え方、先読みや後読みの実践(3) | gihyo.jp
  • はじめての正規表現とベストプラクティス#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つの正規表現
  • 正規表現の先読み・後読みを極める!

    柔軟性の高い正規表現を書こうとすると、避けて通れないのが先読み・後読みです。 先読み・後読みに関して、いままではとりあえず的な理解をしていたのですが、それだと説明できない正規表現に遭遇したので、説明できるまで理解を深めてみました。 とりあえず的な理解 正規表現を使って間もない人が先読み・後読みを理解するための説明です。 肯定的先読み (?=pattern) 次の正規表現では直後に def がある abc(def は含まない)に一致します。

    正規表現の先読み・後読みを極める!
  • 第58回 正規表現の勘所―わかりづらい記法の覚え方、先読みや後読みの実践(1) | gihyo.jp

    連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーPerl入学式のサポーターで知られる尾形鉄次さんで、テーマは「正規表現の勘所」です。 稿のサンプルコードは、執筆時点(2019年9月)の最新であるPerl 5.30.0で動作確認を行っています。紙幅の都合で、誌面ではuse strict;とuse warnings;は省略しています。全文は、WEB+DB PRESS Vol.113のサポートサイトから入手できます。 正規表現は文字列処理の強い味方 Perlは文字列処理に強いと言われていますが、その強さの一因は正規表現でしょう。少しの記述で効果的な文字列処理が期待できるため、ぜひとも活用したい機能です。 一方で、正規表現は読みづらいなどの理由で敬遠されがちです。そこで稿では、初学者向けの丁寧な解説が少ないと筆者が感じたPerlの正規表現について解説していきます

    第58回 正規表現の勘所―わかりづらい記法の覚え方、先読みや後読みの実践(1) | gihyo.jp
  • 正規表現でPHPを脆弱にする (1) 「^ と $」 - Qiita

    みなさん正規表現は好きですか? 私は好きです。簡単に脆弱性を作り込めて、とても便利ですからね。 この記事ではPCRE関数(preg_match(), preg_replace()など)を利用して、みなさまにPHP正規表現のバッドノウハウを教示いたします。 先に結論を書きます 単独の文字列のマッチに $ を用いるのは予期しないパターンになるのでやめましょう。^は特に危険ではありませんが、^と$の組み合せではなく**\Aと\zの組み合せ**を覚えましょう。ただし、m修飾子で複数行(マルチラインモード)で、行頭と行末にマッチさせたい場合を除きます。 文字列のマッチに ^ と $ のペアを利用する そうですね、例としてQiitaのようなユーザー登録サイトの表示名 @tadsan のような文字列を登録する前の検査をするとします。 要件としては、使用可能な文字は abcdefghijklmnopqrs

    正規表現でPHPを脆弱にする (1) 「^ と $」 - Qiita
  • 正規表現に関連する記事 | WWWクリエイターズ

    WWWクリエイターズ › 開発ブログ › 正規表現

  • 私の正規表現におけるポリシー - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    私の正規表現におけるポリシー - Qiita
  • Pythonでの正規表現の使い方 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Pythonでの正規表現の使い方 - Qiita
  • 正規表現入門 星の高さを求めて

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

    正規表現入門 星の高さを求めて
  • K.Takata's software : bregonig.dll

    bregonig.dll 2008/10/12 更新 ダウンロード bron144.lzh (198,956bytes) : 通常版(正式公開版) bron200beta10.lzh (222,035bytes) : Unicode 対応版(テスト版) bregonig.dll について bregonig.dll Ver.1.44 Copyright (C) 2006-2008 K.Takata 1.概要 Tatsuo Baba氏による正規表現ライブラリである Bregexp.dll (*1) 互換 の正規表現ライブラリです。Windows アプリで Perl 互換の正規表現が使え るようになります。 正規表現エンジンとして鬼車 (Oniguruma) (*2) を採用することにより、 オリジナルの Bregexp.dll よりも高度な正規表現を使用できるようになっ

  • 正規表現をわかりやすく視覚化してくれる『REGEXPER』 | 100SHIKI

    おっと、これは便利かも。 REGEXPERを使えば、JavaScriptの正規表現をわかりやすく表現してくれる。 一見、難解な正規表現だが、これを通しても見ると「なるほど、この文字とこの文字にはされまれていて、この間は何の文字でも良いのだな」といったことがわかるようになる。 他の人のコードを読んでいて「?」となったときに試してみてもいいかもですな。

    正規表現をわかりやすく視覚化してくれる『REGEXPER』 | 100SHIKI
  • JavaScriptで正規表現練習ゲーム作った - aike’s blog

    特に何か目的があるわけじゃないんですが、JavaScriptの練習のためにゲームを作ってみました。 Regex Of The Dead タイピングゲームのように正規表現を練習するためのシンプルなゲームです。ゾンビと一般人が迫ってくるのでゾンビの名前にだけマッチするように正規表現を入力して倒していきます。 HTML5の流れでオーディオ、グラフィック、フォントHTML/JavaScriptで簡単に扱えるようになり、さらにenchant.jsのようなゲームエンジンも充実してきて、ゲームJavaScriptだけで気軽に作れるようになってきたようです。 そんなわけで試しに書いてみたのがRegex Of The Deadです。プログラミングは長いことやっているもののゲームを作ったのは大学のとき以来かもしれません。 最初、何か良さそうなゲームエンジンがないものかいくつか調査しましたが、こういったタイ

    JavaScriptで正規表現練習ゲーム作った - aike’s blog