s.elのソースを読んでいたとき、発見したので 記事に残しておきます。 "\A"というのは文字列の先頭、"\z"というのもは文字列の末尾にマッチする アンカーです。"^", "$"は行頭、行末を意味し、1列しかない文字列だと 同じ意味ですが、複数行を扱うとき意味が変わってしまいます。 "\A" = "\`", "\z" = "\'" "\A"に相当するものが、"\`"(バックスラッシュ + バッククォート)、 "\z"に相当するものが、"\'"(バックスラッシュ + クォート) 文字列に現れる場合は "\"は "\\"になりますので、実質 "\\`", "\\'" になります。 例 "\\`"と "^"で結果が違うことがわかります。 (let ((str "aa\naa")) (replace-regexp-in-string "\\`aa" "bb" str)) ; => "bb\naa
emacsで正規表現を使って置換したいみたいな要求はそれなりにあると思いますが、それをやろうとするとemacsの正規表現のバックスラッシュ地獄みたいなものに遭遇することがよくあります。そんな時に使いたいtipsを少しだけ紹介します。 re-builderを使う emacsにはre-builderというものがあって、書いている正規表現のマッチ状況をリアルタイムにプレビューすることが出来るツールが存在します。M-x re-builderして、いろいろ書いてみると現在のマッチ状況がプレビューされます。 実行中にC-c C-wすればその正規表現をコピーでき、C-c C-qで終了出来ます。emacsにはいろいろな正規表現syntaxがあるので、C-c C-iで切り替えもできます。 詳しくは以下の記事を見るとよいでしょう。 Emacsの正規表現編集モード re-builder とややこしいバックスラッ
Emacsの re-builder を使うと、正規表現にマッチする部分をリアルタイムにカラー表示してくれる。 Emacs で正規表現を使うなら re-builder を使おう - Higepon’s blog - Mona OS and Mosh re-builder: the Interactive regexp builder | Mastering Emacs M-x re-builder 起動 C-c C-q 終了便利。便利なんだけど、空白にマッチする正規表現を書こうとして混乱した。 re-builder デフォルトはreadシンタックス。 re-builder にはシンタックス切り替えというのがある。 re-builder: the Interactive regexp builder | Mastering Emacs C-c TABでシンタックスを選択する。シンタックスは次の
ファイル中にある「非 ASCII 文字」を含む行を検出したければ、次のコマンドで。 grep '[^ -~]' file 仕組みは ASCII文字コード - IT用語辞典 を見ると一目瞭然。 まずホワイトスペースからチルダまでを ASCII 文字とみなし、 [a-z] のノリで [ -~] とする。これで ASCII 文字からなる文にマッチする正規表現が出来る。 今回は「非 ASCII 文字」が欲しかったので ^ をつけて条件を逆転させ、完成。 ソースコード中からマルチバイト文字を取り除きたいときなどに便利。コメントを全部英語化したいときとかね。 追記 Emacs 使いの人なら M-x rgrep でこの正規表現を使うと、プロジェクトのマルチバイト文字を一括検索出来て便利。
通常、後方へのびる正規表現マッチでは極力マッチしないようにに動作します。そのため\\sw+などで単語を拾おうとしても最後の一文字だけ拾われてしまいます。looking-back関数の第三引数にはgreedyというオプションが用意されており、これをtにしてやると後方正規表現でも貪欲にマッチしてくれるようになります。 (and (looking-back "\\sw+") (match-string 0)) ; => o (and (looking-back "\\sw+" nil t) (match-string 0)) ; => hello looking-back関数の実装は次のようになります。すごいことやってますが気にしない方向で。 (defun looking-back (regexp &optional limit greedy) "Return non-nil if text b
06/06(土)に神戸でWebtekoという勉強会が開かれた。詳細は告知ページ参照。そこで正規表現について発表したので資料を公開する。 補足 後半は ^.*/ と言う正規表現が /usr/bin/zsh にマッチする様子を例にして、 * の「欲張り」具合とバックトラックについて説明した。 こんな感じ。 まとめ 正規表現の話をすると、「メタ文字一覧とその解説」とか「処理系ごとの微妙な差異」とかになりがちだと思う。 そういう細かい話をし出すときりがないので、今回はあえてメタ文字の説明を絞った。今回出てきたメタ文字は7種類だけで、 | も () も説明しなかった。 なのでこの発表を聴いただけでバリバリ正規表現を使いこなせるようになるわけでもないし、ちょっと絞りすぎたかな、とも思ってる。 むしろ今回のメインは、後半のマッチング メカニズムの部分。こういう話はWeb上の解説でもあんまり見ないし、基本
まずは、Audrey さんが言った Haskell の殺し文句を思い出して頂きたい。 正規表現ベースのパーサはメンテナンスしにくいのに気づいた? Parsec を使って 15分で Perl6 の完全なパーサを書く方法を勉強しましょう。 15分というのは誇張が入っていると思うが、正規表現が保守しにくく、Haskell の Parsec は強力で保守し易いのは事実だ。その理由を Perl と Haskell のコードを示しながら説明してみたいと思う。 Perl を愛する方に:この記事は Perl を攻撃するために書いたのではない。Perl を選んだのは、正規表現を広めた言語であり、僕がそれなりに Perl のコードを書けるためである。この記事の目的は、正規表現よりも関数型パーサー(Parsec)の方が優れていると示すことだ。 例題 この記事では例題として、IPv4 アドレスを解析する関数を書く
というようになっています。 それで得られる説明の具体的な表示例は、 例えば次のようなものです。 The parent syntax table is: C-@ .. SPC which means: whitespace ! . which means: punctuation " " which means: string # . which means: punctuation $ .. % w which means: word & _ which means: symbol ' . which means: punctuation ( () which means: open, matches ) ) )( which means: close, matches ( * .. + _ which means: symbol , . which means: punctuation
正規表現は、"その中のいくつかの文字が特別な構成要素であり、それ以外のものは通 常の文字である" というシンタックスを持っています。通常の文字は、(その文字には マッチし、それ以外のものにはマッチしない) 単純な正規表現です。特別な文字は `$', `^', `.', `*', `+', `[', `]', `\' で、特別な文字が(新たに)定義されること はありません。 (正規表現中の)この外の文字は(全て)`\' がその前に置かれない限 り、通常の文字となります。 例えば、`f' は特別な文字ではありません。これは通常の文字です。`f' は、ストリン グ `f' にマッチし、その他のものにはマッチしない正規表現です(これはストリング `ff' にはマッチしません)。同様に、`o' は `o' のみにマッチする正規表現です。 (それがどのようなものであっても) 2 つの正規表現 a と
今までは、(癖のある)正規表現でただ置換する事しか考えた事がなかったわけですが。 新Emacsの強力な置換機能を使いこなす - ZDNet Japan 行番号みたく、行頭に連番を挿入したい場合も、replace-regexp を使えば簡単にできました。 M-x replace-regexp Replace regexp: ^\(\) Replace regexp ^\(\) with: \,(1+ \#) まじめに replace-regexp の使い方やら機能やらを調べた事がなかったので、まったく知りませんでした。ぷろぐらまぶるなんですね。 なんか、ワクワクしてきた! 連番生成を考えた場合は、replace-regexp だとあらかじめ置換対象を用意しなければならないので、最適な方法ではないかもしれません。↓では、また別の方法が紹介されてます。 Emacsで連番を挿入する方法 - ’(r
6年ぶりの大きなアップデートとなったEmacs 22.1、CVS先端の開発バージョンを使っているユーザは、なんとなく見過ごしてしまっているかもしれないが、新しい機能には便利なものが多い。ここでは、特に強化された置換機能について取り上げる。使いこなせば強力なので、是非使ってみて欲しい。 筆者など : 後藤大地(オングス) チャネル名 : ZDNetオープンソース URL : http://japan.zdnet.com/oss/story/0,3800075264,20350805-2,00.htm 6年ぶりの大きなアップデートとなったEmacs 22.1、CVS先端の開発バージョンを使っているユーザは、なんとなく見過ごしてしまっているかもしれないが、新しい機能には便利なものが多い。ここでは、特に強化された置換機能について取り上げる。使いこなせば強力なので、是非使ってみて欲しい。 re
本屋で立ち読みしてたら、Linux Journalって雑誌に "Validate an E-Mail Address with PHP, the Right Way" って記事が載っているのを発見したので、簡単に要約を。 まず、以下のメールアドレスは「正しい」アドレスである、と紹介。 Abc\@def@example.com customer/department=shipping@example.com !def!xyz%abc@example.com これは、RFC3696からの引用。 RFC3696は、Application Techniques for Checking and Transformation of Names (名前の検査と変換のアプリケーション技法) ってやつで、そのなかに、 "Restrictions on email addresses" って章があるみたい。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く