タグ

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

  • 君たちは正規表現におけるインド数字の罠にハマったことはあるかい?(١٢٣٤٥٦٧٨٩) - 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
  • Unicodeプロパティを使ったPerl正規表現 - Hatena Developer Blog

    こんにちは、Webアプリケーションエンジニアのid:nanto_viです。 Webアプリケーションを作っていると、「全角文字と半角文字を統一したい」「ユーザーの入力から漢字を抜き出したい」といったテキスト処理を行う場面にたびたび遭遇します。はてなではWebアプリケーションのサーバー側プログラミング言語としてPerlを多く使っていますが、PerlならこのようなときにUnicodeプロパティを用いた正規表現パターンで柔軟な処理が可能です。 Unicodeプロパティ 現在、ほとんどのプラットフォームで採用されている文字集合がUnicodeです。Unicodeでは文字だけでなくその文字の様々な特性(プロパティ)も定められており、テキスト処理の基礎情報として活用できます。 Perl正規表現でのUnicodeプロパティの利用 Perlの正規表現では、\p{Property_Name=Value}のよう

    Unicodeプロパティを使ったPerl正規表現 - Hatena Developer Blog
  • mvにサヨナラ!renameコマンドのイケメンぶりが半端ない

    なんですかこのイケメンコマンドは ファイル名の変更、ファイルの移動と言えば mvコマンドだ。初歩の初歩だ。 複雑なリネームはパイプやシェルスクリプトで実現するものだという思い込みから、 renameというイケメンコマンドを知らずにいた!なんてもったいない! とても簡単、そしてステキすぎる実行結果 $ ls file01.txt file02.txt file03.txt file04.txt file05.txt $ rename 's/.txt/.csv/' *.txt $ ls file01.csv file02.csv file03.csv file04.csv file05.csv これだけで、すべての .txtファイルの拡張子変更ができてしまった! 見ての通りrenameコマンドは、複数ファイルを一括でリネーム、移動するときに力を発揮する。 コマンドの記法は、以下の通り。 ren

    mvにサヨナラ!renameコマンドのイケメンぶりが半端ない
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • Perl の正規表現の「名前付き捕捉」がとても便利

    Perl の正規表現の「名前付き捕捉」がとても便利 2014-08-07-1 [Programming] Perlの正規表現で「名前付き捕捉」を使うと、マッチした部分に名前をつけておけるのであとから参照するときに便利。 「(?<name>...)」でマッチさせると、ハッシュ「%+」に保存されて、「$+{name}」でアクセスできるのです。同じ正規表現内では「\g{name}」など。 サンプルプログラムです。日付表現にマッチしたら、年、月、日をそれぞれ別途格納。そしてそれを正規化して出力。 サンプルプログラム: #!/usr/bin/env perl use strict; use warnings; while (<DATA>) { chomp; if (m{ (?<Y>[0-9]{4})\s?年\s? (?<m>[01]?[0-9])\s?月\s? (?<d>[0-3]?[0-9])\s

    Perl の正規表現の「名前付き捕捉」がとても便利
  • 【第638回】正規表現の先読み、後読みのアサーション : イジハピ!

    2014年07月09日19:45 【第638回】正規表現の先読み、後読みのアサーション カテゴリすぐわかる気がするPerl query1000 Comment(0)Trackback(0) 正規表現による検索置換を使っていて突き当たる問題として、ある条件の時のみ検索置換を行いたい、ということがある。 たとえばIT用語で、カタカナ列の末尾にある音引き(ー)を取りたいとする。 (ちなみにぼくは、以前書いたが、IT用語の末尾の音引き削除は意味のない習慣で、やめるべきだと思っている。最近はマイクロソフトをはじめ音引きを付ける企業も多い) (置換前)コンピューターが使えて便利だ (置換後)コンピュータが使えて便利だ 単純に「ー」を全削除すると (置換後)コンピュタが使えて便利だ となってしまう。 そこで、カタカナ以外の前にある音引きを削除する、と考える。 しかし、カタカナ以外の1文字は[^ァ-ン]だ

    【第638回】正規表現の先読み、後読みのアサーション : イジハピ!
  • grepについて

    6. 使用例1 今いるディレクトリ以下にあるファイルの中で "#pragma omp" を含むファイルを探したい $ grep -r "#pragma omp" . -r: 指定したディレクトリ直下だけでなく、 その下にあるディレクトリも再帰的に検索 7. 使用例2 リアルタイムにログをフィルタリングしたい $ tail -f error_log | grep --line-buffered "error" --line-buffered: バッファせずに1行ごとに出力

    grepについて
  • regexp - ^$でなくて\A\zを使おう : 404 Blog Not Found

    2009年03月09日00:30 カテゴリLightweight LanguagesTips regexp - ^$でなくて\A\zを使おう まずは回答から。 正規表現で「制御文字以外」のチェック - ockeghem(徳丸浩)の日記 文字エンコーディングの妥当姓 制御文字(\x00〜\x1f, \x7f)のチェック 文字列長のチェック このうち後ろ二つを正規表現として書くにはどうすればいいかを考えていました。 こういう時には、「全文字がOKならOK」と考えるのではなく、「一文字でもNGならNG」と考えると楽になります。それは「スペースと非制御文字以外」なのですから、/[^ \S]/が求めていた正規表現で、=~ではなく!~が使うべき演算子ということになります。全角スペースもOKにしたければ、/[^ \x{3000}\S]/。[追記参照] [Run via Codepad] #!perl -

    regexp - ^$でなくて\A\zを使おう : 404 Blog Not Found
  • 正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう

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

  • プログラミング言語における正規表現リテラルの必要性について

    Twitterに書いたことのまとめです。 プログラミング言語の仕様の一部として正規表現リテラルを提供することの得失について、JavaScriptを例に説明します。 ■より簡潔なコード 言うまでもありませんが、正規表現リテラルを使った方が簡潔なコードになります。 (new RegExp("abc")).exec(s) // リテラルを使わない場合 /abc/.exec(s) // リテラルを使った場合 また、正規表現リテラルがない場合は、文字列リテラルとしてのエスケープと正規表現としてのエスケープが二重に必要になる結果、コードの保守性が低下します注1。 new RegExp("\\\\n"); // リテラルを使わない場合 /\\n/ // リテラルを使った場合 ■エラー検出タイミング 正規表現リテラルがない場合、実際にその正規表現が評価されるまで記述エラーを検出することができません。正規表

  • Rubular: a Ruby regular expression editor and tester

    Rubular is a Ruby-based regular expression editor. It's a handy way to test regular expressions as you write them. To start, enter a regular expression and a test string. Or you can try an example.

    Rubular: a Ruby regular expression editor and tester
  • Perlの m// は中身が固定文字列だと爆速になる - Islands in the byte stream (legacy)

    [追記] 実際に検証してみると、パターンが短いと index() のほう速いこともあるようです。パターンが長いと正規表現のほうが高速になるのでそもそもアルゴリズムが違うようですね。 よってこのエントリの内容は必ずしも正確ではありません! cf. https://gist.github.com/kazuho/5410635 [/追記] Perlの話題を日語で – Lingr で出た話題です。 Perlの正規表現マッチはパターンが単純だと index() とおなじく Boyer-Moorアルゴリズムで検索するので非常に高速です。要は最適化のつもりでパターンマッチをindex()に書き換えるのは無意味なのです。 ソースは pp.c や regexec.c あたりを fbm_instr() で検索かな? ドキュメントもどこかで読んだ気がするのですが思い出せず>< perl -MDevel::Pe

    Perlの m// は中身が固定文字列だと爆速になる - Islands in the byte stream (legacy)
  • 正規表現のキャプチャ - アリ

    正規表現のキャプチャの結果を取得したいときには、次のようなコードを書く: if (my @capture = '10/17' =~ m!([0-9]{2})/([0-9]{2})!) { # @capture = (10, 17) } $1や$2を使っても取得はできるが、キャプチャが増えたときに$1, $2, $3, $4, ...と増やしていくのは苦行である。 このようにすると、@captureにキャプチャの結果が入る。しかし、キャプチャの括弧がない正規表現の場合、@captureの値はどうなるのか。 if (my @capture = '10/17' =~ m![0-9]{2}/[0-9]{2}!) { # @capture = (1) } キャプチャされていないのに、@captureには(1)が代入されている。空リストはfalse扱いなので、こういったケースのために(1)を返すみたい

    正規表現のキャプチャ - アリ
  • ものかの » 正規表現の略記法 \d と \s と \w

    正規表現の文字クラスの略記法 \d と \s と \w がいつのまにかアレレなことになっていたのでメモ。(1 Perl 5.8 以降で正規表現を使うには use utf8 が必須。 use utf8 では \d と \s と \w の文字クラスの内容が Unicode のカテゴリーに基づいている。 InDesign(Boost)も同様。 PCRE や Ruby は変わりなし。 (2 参考資料:perldoc の perlrecharclass 参考資料:Programming Perl の 5.4. Character Classes ちょっと詳しく見ていきます。 *以降、Perl = use utf8 の Perl ほとんど全ての人が [0-9] の10文字として使っていますが、Perl では \p{Nd} です。ただし、Perlのバージョンによって(対応しているUnicodeバージョン

    ものかの » 正規表現の略記法 \d と \s と \w
  • 日本語の自然言語処理には Perl も便利 - アスペ日記

    小ネタ。Perl で日語の簡単な処理をするやり方(こういうことが簡単にできるという例で、具体的なオプションの意味等は解説していない)。 コマンドラインでちゃちゃっと日語の処理をしたい時、Perl はけっこう役に立つ。日語の一文字を一文字として扱えるから。特に、コマンドラインやファイルのエンコーディングを UTF-8 で統一しておくといい。 例えば、ひらがなの単語リストを読み込んでカタカナにするには、次のようにすればいい(「ヴ」は扱い方によって変わるので省略)。 perl -CS -Mutf8 -ple 'tr/ぁ-ん/ァ-ン/' < in.txt > out.txt カタカナの単語リストの最初の一文字を濁音から清音にしたいということがあるかもしれない。そういう時はこうする(「ヴ」については同上、半濁音の処理も略)。 perl -CS -Mutf8 -ple 's{^(.)}{my $

    日本語の自然言語処理には Perl も便利 - アスペ日記
    tzccinct
    tzccinct 2011/08/27
    「「カタカナだけ」と思って処理をする時、実際は「ー」も含めたい場合が多い。」
  • Perl5 で半角カタカナにマッチする正規表現を簡単にかく方法について - tokuhirom's blog

    にしても、こちらのサイトでも言われていますが、なぜ半角カナ専用のUnicodeブロックがないのかと小一時間(ry http://blog.livedoor.jp/sasata299/archives/51194035.html http://d.hatena.ne.jp/pasela/20081003/ll_unicode ということで、 sub InHankakuKatakana { "FF65\tFF9F" }という一行をはっつけると、つかえるようになりますね。 #!/usr/bin/perl use strict; use warnings; use utf8; use Test::More; sub InHankakuKatakana { "FF65\tFF9F" } ok("\x{FF65}" =~ qr/\p{InHankakuKatakana}/); ok("abc" !~

  • 404 Blog Not Found:perl - 勝手に添削 - 40行で作るPerl用テンプレートエンジン

    2007年10月30日20:00 カテゴリLightweight Languages perl - 勝手に添削 - 40行で作るPerl用テンプレートエンジン 久々の勝手に添削。今回はこちら。 40行で作るPerl用テンプレートエンジン 正規表現がらみなので、Perl以外でも有用。 添削箇所は、こちら。 40行で作るPerl用テンプレートエンジン sub convert { return unless defined(my $str = shift); $str =~ s{&amp;}{&amp;}gso; $str =~ s{<}{&lt;}gso; $str =~ s{>}{&gt;}gso; $str =~ s{\"}{&quot;}gso; $str; } これの最初のsubstitutionが&amp;ではなくて&ではないかというのはさておき、こういった場合、何度も正規表現をかけ

    404 Blog Not Found:perl - 勝手に添削 - 40行で作るPerl用テンプレートエンジン
  • 正規表現のデバッグ方法 - こんにちはこんにちはmonmonです!

    re=debugってやると詳細出してくれるの知らなかったのでコピペ。 Perlコーディング初心者質問スレ Part 62 502+1 :nobodyさん [] :2011/05/02(月) 02:42:13.10 ID: fV7VGj7j (1/2) 「文字列A        文字列B」 という 2 つの文字列の間に複数の空白がある行において /\s*/ でマッチさせると、変数 $` (=$PREMATCH) には何も入りませんでした なぜでしょうか? 入門書は「パターンマッチが複数解釈出来る場合には一番長い解釈にマッチする」とあります。 よって自分は \s* という「0 回以上のホワイトスペースの繰り返し」は 最も長い解釈では複数の空白にマッチし $` には文字列A が代入されるはずだと考えたのですが 503+1 :1/2 [↓] :2011/05/02(月) 03:50:24.42 I

    正規表現のデバッグ方法 - こんにちはこんにちはmonmonです!
  • mod_rewriteでの最後の砦 - As a Futurist...

    Web サーバ勉強会#3で話してきた内容です。mod_rewrite と mod_proxy_balancer 使って、L7 ロードバランサを作ろうとしたときにハマった話なんですが、すごい特定の限られた条件だし、そもそも大してクリティカルじゃないのですが、まぁまぁ面白い話題だと思うので紹介しておきます。 mod_proxy で最後の砦を作る時 ただのリバースプロキシだったり、L7 ロードバランサだったりの用途で、Apache の mod_proxy(mod_proxy_balancer)を使うことはたまにあると思います。RewriteMap とか、ルールのマッピングを外部ファイルにできたりするので結構柔軟に色々できます。 その際に色々と振り分けのルール付けを設定した後で、最後に「どれにも当てはまらない時はとりあえずここに振り分けさせる」というルールを書くときみなさんどうしてますか?Apac

    mod_rewriteでの最後の砦 - As a Futurist...
  • /gcと\Gを使って複数の正規表現式でトークンを少しずつ削りとる - Islands in the byte stream (legacy)

    複数の正規表現式で文字列からトークンを切り出したいことがある。しかし、以下のコードは動かない。無限ループになってしまう。 #!perl -w # THIS DOES NOT WORK!!! use 5.10.0; use strict; use utf8; my $s = 'foo bar baz FOO BAR BAZ'; while( 1 ) { if( $s =~ /\b (f..) \b/xmsig) { # first matching expression say $1; } elsif( $s =~ /\b (b..) \b/xmsig) { # second matching expression say $1; } else { die 'finished'; } } これは[twitter:@akajiro]さんと[twitter:@hio]さんに教えてもらった結果、解

    /gcと\Gを使って複数の正規表現式でトークンを少しずつ削りとる - Islands in the byte stream (legacy)