Hatena::ブログ(Diary)

名もないテクノ手 このページをアンテナに追加 RSSフィード

EPUB版『InDesign者のための正規表現入門』

InDesignのTips一覧

2011-04-02

[][][][][]InDesign正規表現では、後読みに繰り返しや選択が使えない

InDesign正規表現で、後読み(戻り読み)には繰り返しや選択が使えません。これはInDesign正規表現の仕様です。たとえば下図のようなキャプションの「●」だけに文字スタイルを適用したいときを考えてみましょう。

f:id:seuzo:20110402154921p:image

最初に思いつくのはこんな正規表現です。

(?<=^図\d?\d)●

しかし、マッチしません。「(?<=^図\d+)●」なども同様です。後読みの中では繰り返しは使えません。

正規表現クックブックのP95「後読みのさまざまなレベル」に少し解説がありました。ちょっとだけ引用します。

正規表現ソフトウエアは、テキストを左から右に探すように設計されてきました。多くの場合、後読みはちょっとしたハックとして実装されています。後読みに書き込まれた文字数を計算し、その字数分だけ後戻りし、後読み内のテキストと対象テキストを左から右に比較するのです。

要するに、基本的には後読み内のテキストは固定長でなければならないってことです。*1


後読み中の選択

今度は、選択を使ってこんな正規表現を試してみます。

(?<=^図\d\d|^図\d)●

これだと、2桁の数字の後ろの●だけにマッチします。1桁の後ろの●にはマッチしません。選択の順序を入れ替えて(?<=^図\d|^図\d\d)とすると、1桁の後ろの●にだけマッチすます。これもやはり選択が正しくサポートされていないのでしょう。*2

後読み中の選択をサポートしている言語、たとえばRuby1.9*3で下記のように書いた時は正しく動作します。

p /(?<=^図\d\d|^図\d)●/ =~"図2●ほげほげ" #=>2
p /(?<=^図\d|^図\d\d)●/ =~"図2●ほげほげ" #=>2
p /(?<=^図\d\d|^図\d)●/ =~"図18●ほげほげ" #=>3
p /(?<=^図\d|^図\d\d)●/ =~"図18●ほげほげ" #=>3

解決策

とりあえず、こんな感じで解決してみました。

(?<=^図\d\d)●|(?<=^図\d)●

f:id:seuzo:20110402165021p:image

この正規表現スタイルをもった段落スタイルを適用すれば、●文字だけが文字スタイル適用になったのがわかります。

f:id:seuzo:20110402165022p:image

この場合だけに限れば、先頭文字スタイルを使っても解決するかもしれません。しかし、正規表現スタイルは先頭文字スタイルよりも格段に扱いやすいので、いろいろなバリエーションを習得すると吉でしょう。

*1:ただし、これは実装によるので、Java.NET Frameworkでは量指定子が使えるようです。

*2:選択が未サポートだとしたらエラーになるはずなので、もしかしたらバグかもしれない

*3:1.8系は後読みをサポートしません

2010-09-16

[][][][]DTPの勉強会 特別編・第1回

あかつきさん主催の『DTPの勉強会 特別編・第1回』でおしゃべりします。お申し込みは下記から:

セッション1の内容は第6回大阪DTPの勉強部屋と同じです。大阪同様に物販もさせていただくことになりました。CD-ROM版『InDesign者のための正規表現入門』を半額(500円)で販売します。

セッション2ではHTMLからEPUBを作成するデモをさせていただきます。HTMLさえ書けば、あとはSigilで変換するだけなので、すぐに終わっちゃいます。あかつきさんはPagesからの変換のデモをされるご予定とか。


「セミナー行ったことない」「大きなお[兄姉]さんとかいて、なんだか怖そう」と思っている方を特に歓迎します。

2010-09-01

[][][][]第6回大阪DTPの勉強部屋

第6回『大阪DTPの勉強部屋』でおしゃべりします。

セッション1ではInDesign正規表現の基礎から実例までを学べるワークショップになっています。InDesign正規表現は飾りじゃありません。正規表現を使えば、今まで苦労していた手作業を一瞬で解決する魔法が手に入ります。正規表現を使ったことがない方、使ったことはあるがちょっと自信がない方に最適な講座です。概ね、EPUB版『InDesign者のための正規表現入門』をテキストにしています。およそ90分ですが、正規表現を学ぶきっかけになればと考えています。

会場では、CD-ROM版『InDesign者のための正規表現入門』を販売させていただくことになりました。CD-ROMの内容は

  • EPUB版『InDesign者のための正規表現入門』
  • HTML版『InDesign者のための正規表現入門』
  • セミナーで使用するスライドとすべてのDEMOムービー(.mov形式と.f4v形式)

が収録してあります。今回、大阪DTPの勉強部屋さんのご協賛をいただいて、通常価格1,000円のところ半額の500円で頒布しております。*1もしよければ、お求めください。なお、このCD-ROMは数に限りがあるため、通信販売を予定しておりません。


セッション2では、スクリプティングについてのディスカッションです。パネリストは下記のとおり。

おおまかな進行内容は、akane_nekoさんによる基本的なスクリプトのルーチン(初心者向け)。たけうちとおるさんとぼくとで、プログラミングTips(中級者向け)を予定しています。時間が許せばちょっとした質疑応答もあるようです。


ではみなさま、大阪で会いましょう!


参照

[大阪DTPの勉強部屋]9/25(土)開催!スクリプト特集に出演!? - 秋葉秀樹 個人ブログ

【大阪DTPの勉強部屋】9/25(土)に参加します - ちくちく日記

大阪DTP勉強会 - たけうちとおるのスクリプトノート

*1:すでにオンラインでEPUB版を購入済みの方は、iPhoneなどでご提示いただくか、巻末「リリースノート」に記載されている発行日を口頭で答えていただければ、さらに100円割引いたします。当日忘れちゃった人はごめんなさい。

2010-08-18

『InDesign者のための正規表現入門』

[][][][]EPUB版『InDesign者のための正規表現入門』頒布はじめました。

InDesignを使って正規表現の基礎と実例が学べるテキストです。EPUBフォーマット*1になっていますので、多くのEPUBリーダー上で閲覧できます。


目次

目次は以下のとおりになっています。

InDesign者のための正規表現入門

    • はじめに
  • 基礎編
    • 正規表現とは何か?
    • 正規表現で何ができる?
    • メタ文字とは?
    • メタ文字を攻略する
      • ■文字を表すメタ文字
      • ■位置を表すメタ文字
      • ■繰り返しを表すメタ文字
      • ■その他のメタ文字
      • ■メタ文字をそのものを表すには
    • 「先読み」と「戻り読み」テクニック
      • ■先読み
      • ■戻り読み
      • ■補足
    • 陥りやすい罠
      • ■欲張りなマッチ
      • ■否定文字クラス
      • ■方言
    • 正規表現の考え方
    • 正規表現スタイルについて
    • InDesign独自の正規表現
      • ■独自のメタ文字表現
      • ■改行文字
      • ■全角半角の区別
      • ■POSIXブラケット表現

  • 実技編
    • マーキング済みのテキストに段落スタイルを適用する
    • 価格にだけ特定の文字スタイルを適用する
    • ★〜★に囲まれていたら太字にしたい
    • (〜)内の文字サイズを小さくする
      • ■パーレン文字を含めて小さくする
      • ■パーレン文字内だけを小さくする
      • ■パーレンが入れ子になっている場合
    • 数字の桁数に応じた字形にする
    • 数字の位取り
    • 電話番号の再フォーマット
    • 重複行をまとめる
    • 空行の削除
    • 特定の範囲の数字を探す
    • 「す。」のように1文字だけの行を禁止
    • 文字数に応じて自動長体
    • 日本語とハングル文字の混植
    • 日付の数字の桁揃え
    • 2倍ダーシ
    • 英数字の扱い
    • 【番外編】ルビの付加

  • 付録
      • ■参考書籍
      • ■参考Webサイト
    • 主な正規表現一覧
      • ■文字を表すもの
      • ■位置を表すもの(アンカー)、後読み/先読み
      • ■オプション
      • ■繰り返し
      • ■文字クラス、グループ、選択
    • リリースノート

本書の冒頭部分を引用します。

はじめに

 読者の中には「正規表現」という言葉を初めて聞く方もいらっしゃるかもしれません。正規表現はとても便利なテキスト検索方法の一種です。「正規表現は難しい」などと言う人がいますがそれは誤解です。基礎をきちんと理解すれば、決して難しいものではありません。

 本書は、正規表現を初めて学ぶ人のために書きました。特に、Adobe InDesignを使って印刷物のデザインやレイアウトをしている方を対象にしています。InDesignはCS3から正規表現検索置換ができるようになりました。さらにCS4からは段落の属性として「正規表現スタイル」が適用でき、正規表現の利用価値が格段に高まっています。本書ではInDesign CS4 / CS5を使って正規表現をイチから学べるようになっています。

 本書は前半と後半に大きく分かれています。まず、前半の基礎編で正規表現の基本的な考え方について学びます。次に実技編でいくつかの作例を見ながら正規表現を学習できます。実技編はチュートリアルとして実際にやってみると理解が深まるでしょう。巻末には参考書籍や主な正規表現一覧を掲載してあります。


 筆者と正規表現の付き合いはもう20年以上になります。その間に使っているコンピュータもアプリケーションもまったく変わってしまいました。正規表現は息の長いスキルです。正規表現のパワフルな魅力をひとりでも多くの方に知っていただきたいと思います。


入手先

わたしのTwitter宛にDMをいただくか、下記のコメント欄にメールアドレス(非公開)を記入してコメントお願いします。

わたしののメールアドレスを知っている方は、メールで直接オーダーしていただいて、銀行振込なども受け付けています。

  • 頒布価格:600円/1ユーザー

*1:HTML+CSSからSigilにて生成しました。

2010-03-25

[][][][][]数字を3桁づつカンマ区切りにする

今朝、なにげなくruby-listを読んでいて数値をカンマで区切る(位取り)正規表現としてこんな方法が紹介されていました。

[ruby-list:46948] Re: 正規表現マニュアルの先読みの記載

p "1000000".gsub(/(?<=[0-9])(?=(?:[0-9]{3})+\z)/, ',')

なるほどこれはいい方法かもしれないと思って、さっそくInDesignでも試してみました。

検索:(?<=\d)(?=(\d{3})+\D)
置換:,

けれど、マッチはする(カーソルが正しく移動する)のに置換しません。

f:id:seuzo:20100325121011p:image

なんだろう? 後ろ読みのバグかもしれないです。仕方ないので、こんな感じでやってみます。

検索:(\d)(?=(\d{3})+\D)
置換:$1,

カーソルの位置さえ気をつければ、きちんとカンマ取りをしてくれます。何桁でもOK。

f:id:seuzo:20100325121012p:image

ただし、小数点以下には対応していません。(追記:2010-03-26T11:42:55+0900)→そんなときにスクリプトですよ。