前回の記事の続き。前回は、正規表現が使えない時はパーサコンビネータを使ってみると良いということを書いた。 パーサコンビネータのためのライブラリは、以下のように各言語ごとにいくつかある。 JavaScript - Parsimmon Ruby - rparsec treetop Python - parsy PHP - PHPPEG 各言語でいくつかあるのだが、正規表現と違ってパーサコンビネータには統一的な書き方があるわけではないし、ライブラリによって使い方も様々である。なので、今まで正規表現だけ使ってきた開発者がちょっと使ってみようと思っても、使い方がよくわからずに面食らってしまうことがある。 パーサコンビネータはテキストをパースするための非常に強力な仕組みだが、その背後にある考え方を理解しなければこれらのパーサコンビネータのライブラリを使う際の障害になるだろう。逆に言うと、それさえ理解で
メモ書き程度です. 例えば, aaafoobbbbarcccfooddd みたいな文字列があった時に,fooとbarにマッチしない文字列が欲しい時には以下のように書くと良い. $str =~ m/(.*?)(?:foo|bar)/g; 実行すると以下のような値が得られる. $VAR1 = 'aaa'; $VAR2 = 'bbb'; $VAR3 = 'ccc'; 加えて条件のキャプチャをするようにすれば,つまり $str =~ m/(.*?)(foo|bar)/g; と書いてやれば, $VAR1 = 'aaa'; $VAR2 = 'foo'; $VAR3 = 'bbb'; $VAR4 = 'bar'; $VAR5 = 'ccc'; $VAR6 = 'foo';という結果が得られるので,簡単なパーザであれば楽に書ける風味.
正規表現のキャプチャの結果を取得したいときには、次のようなコードを書く: 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)を返すみたい
RegExp は 正規表現(Regular Expression)の略。以下、参考サイト。 正規表現(RegExp)RegExp - MDC Doc CenterRegExp オブジェクトの中身は?RegExp オブジェクトのプロパティには 直前の マッチングに関する情報が入る。じゃあ何が入っているのか? //とりあえずなにもせずに調べてみる function dump( obj ){ var str = ''; for(var k in obj){ str += k + "("+typeof(obj[k]) + ") | " + obj[k] + "\n"; } document.write( str ); } dump( RegExp ); input(string) | message.Reload to activate window console multiline(boole
『Perl ベストプラクティス』はクセの強い本ではあるが、私のプログラミングスタイルが受けた影響は少なくない。なかでも、PBPによってPerlの正規表現の/x修飾子のすばらしさを知ったことは大きい。これはPBP以前は使おうと思ったことがなかったが、今となってはこれなしに複雑な正規表現を書こうとは思わない。 /x修飾子は、正規表現中の空白を無視し、コメントを入れられるようにするための修飾子だ*1。 以下の正規表現は、Text::Xslateから抜粋したものだ。 In Text/Xslate/Util.pm: our $NUMBER = qr/ (?: (?: [0-9][0-9_]* (?: \. [0-9_]+)? \b) # decimal | (?: 0 (?: (?: [0-7_]+ ) # octal | (?: x [0-9a-fA-F_]+) # hex | (?: b [01
Unicodeブロック使おうと思ってググってたら。 \p{InHalfwidthAndFullwidthForms} # 半角カナなど(※0-9とかA-Zにもマッチするみたい・・) http://blog.livedoor.jp/sasata299/archives/51194035.html あら、そうなんだ。 perldoc unicodeを読み直すと、Unicodeブロックを組み合わせてユーザー定義の文字プロパティ(User-Defined Character Properties)を作れると書いてあった。In/Isから始まる次のような関数を定義する。 package Hoge; sub InHankakuKana { return <<'END'; +utf8::InHalfwidthAndFullwidthForms -utf8::N -utf8::Ll -utf8::Lu EN
Perl使いと言えば正規表現ではありますが。 こんな記事を見つけたわけです。 Notice that Perl requires over sixty seconds to match a 29-character string. Regular Expression Matching Can Be Simple And Fast たかだか29文字のマッチで1分もかかるだって!? 今までの自分の常識にはなかったので愕然としました。早速実際にやってみて調査。 % date; perl -e '"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn" =~ /n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?n?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn/;'; date 2008年 4月 9日 水曜日
連想配列のキーに正規表現を使いたくなることってあるじゃない。 my @strings = qw/ カナダ インド イギリス ニッポン ルーマニア チュウゴク イタリア スペイン ウクライナ アルゼンチン アメリカ /;こんな配列があるとする。これをア行、カ行...などにグループ分けして、例えば次のような出力を得たい場合を例にしてみよう。 カ行: カナダ ア行: インド ア行: イギリス ナ行: ニッポン ラ行: ルーマニア タ行: チュウゴク ア行: イタリア サ行: スペイン ア行: ウクライナ ア行: アルゼンチン ア行: アメリカ 一番すぐ思いつきそうなのが次のコードかもしれない。 for my $str (@strings) { print &grouping($str), ": $str¥n"; } sub grouping { return 'ア行' if(m/^[ア-オ]/)
\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
Go to the first, previous, next, last section, table of contents. 正規表現の構文 正規表現には構文があり,そこではいくつかの文字は特別な意味を持ちます.そ れ以外の文字は通常の文字です.通常の文字は,単純な正規表現で,その 文字自体にマッチします.特別な文字とは,`$',`^',`.', `*',`+',`?',`[',`]',`\'です.他に特別 な文字が定義されることはありません.正規表現に現われる他の文字は,すべて 通常の文字です.ただし,前に`\'がある場合は別です. たとえば,`f'は特別な文字ではありません.したがって,通常の文字であ り,文字列`f'にマッチする正規表現となります(これは文字列`ff'に はマッチしません).同様に`o'は`o'のみにマッチする正規表現です. どんな2つの正規表現a,bも連結する
印刷する メールで送る テキスト HTML 電子書籍 PDF ダウンロード テキスト 電子書籍 PDF クリップした記事をMyページから読むことができます 6年ぶりの大きなアップデートとなったEmacs 22.1、CVS先端の開発バージョンを使っているユーザは、なんとなく見過ごしてしまっているかもしれないが、新しい機能には便利なものが多い。ここでは、特に強化された置換機能について取り上げる。使いこなせば強力なので、是非使ってみて欲しい。 replace-regexpがプログラマブル置換へとパワーアップ Emacsではreplace-regexpで正規表現置換ができる。現在主流となっている正規表現のスタイルはPerlに源流をおいたものが多いが、Emacsの正規表現はそれとは異なる。特に\( \)の表記などが独特だ。とはいえ、Emacsを愛しているならば、馴れるしかないだろう。書き方が違うだけ
URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=regexp" "MeadowMemo/正規表現とは"へのコメント(無し) 普通,文字を検索するというと,単に「 emacs 」と単語を入力すると思います. もちろん,これでも検索できますが,「 emacs 」という単語で始まる行を探したい時には 何度も移動する必要があり不便ですね. そこで,正規表現というものがあります.これを使うと,「emacsで始まる行」や「emacs で始まりfunctionで終わる関数」などなど,様々な検索を行うことができるのです. しかし,正規表現に慣れていないと,なかなか使うことができません. そこで,このページでは正規表現の基礎について簡単に紹介していきます.合わせて,正 規表現に関連した Elisp なども紹介していきます. ちなみに正規
Reguler Expression Editor(Javascript ver.) Pattern: Replace: Target: abcdefg acbdefg ab bc cdxxabxxbc abc xxabcdefgxx
日頃より楽天のサービスをご利用いただきましてありがとうございます。 サービスをご利用いただいておりますところ大変申し訳ございませんが、現在、緊急メンテナンスを行わせていただいております。 お客様には、緊急のメンテナンスにより、ご迷惑をおかけしており、誠に申し訳ございません。 メンテナンスが終了次第、サービスを復旧いたしますので、 今しばらくお待ちいただけますよう、お願い申し上げます。
NAME DESCRIPTION Part 1: The basics Simple word matching Using character classes Matching this or that Grouping things and hierarchical matching Extracting matches Matching repetitions Building a regexp Using regular expressions in Perl Part 2: Power tools More on characters, strings, and character classes Compiling and saving regular expressions Embedding comments and modifiers in a regular expre
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く