サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは本日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。
先日、Yuji@勉強部屋さんと電話で話していて、文字クラスの理解が正規表現の「一里塚」だなぁ、と感じました。InDesignで初めて正規表現に接する方も多く、戸惑われている人もいらっしゃると思います。 文字クラスは正規表現の中でもちょっと特別な存在です。文字クラス内だけで使えるメタ文字や、位置によって意味が変わるメタ文字もあります。文字クラスについては、日頃使い慣れた人でも間違えやすい部分もあり、結構奥が深いのでおさらいの意味も込めてまとめておきます。 文字クラスの基本 ここで言う「文字クラス」は、「POSIXブラケット表現」とも呼ばれます。違うサイトや書籍などで、これらの用語が混在することがありますが、ほぼ同じと考えて差し支えありません*1。 文字クラスは任意の1文字にマッチする「文字集合」を表現できます。 簡単な例から見てみましょう。たとえば「お母さん」と「お父さん」のどちらにもマッチ
単に置換する 文字列を指定して単に置換するだけです。 var hoge = 'abc'; hoge = hoge.replace('a', 'z'); //'zbc' 注意する点は最初にヒットした部分しか置換しないということ var hoge = 'aaa'; hoge = hoge.replace('a', 'z'); //'zaa' という動き こいつを全置換にしたい場合は gオプションを指定してやります var hoge = 'aaa'; hoge = hoge.replace('a', 'z', 'g'); //'zzz' ▲ ▼ 正規表現でヒットさせて置換 検索条件に正規表現オブジェクトも使えます var hoge = 'abc'; hoge = hoge.replace(/.c/, 'zz'); //'azz' ▲ ▼ 正規表現でヒットさせて置換 後方参照 キャプチャ利用版
文字列の検索や文字列の書式チェックに使うだけでも正規表現は便利なのですけど、置換の際にも使えるようになると、正規表現を何倍も便利に感じられます。 多機能なテキストエディタであればたいていは正規表現を用いた置換をサポートしています。プログラミングする方だけでなくテキストエディタで文章を書いている方にとっても便利な道具となりますので、正規表現による置換処理をぜひ身につけていって下さい。 なお、このページは基礎入門編を読み終えた方を想定しております。正規表現について分からないことがあればそちらをご覧下さい。 登場した正規表現はリファレンスにまとめてあります。まとめて振り返る時などはこちらをご覧下さい。 まずは基本から。単純な文字列置換を紹介します。置換では「マッチパターン」と「置換文字列」の二つを指定することになります。例えば「ください」を「下さい」に置換する場合、マッチパターンと置換文字列はそ
InDesignが正規表現対応となって、「あー、これで数字の桁数とか簡単に指定できるわ〜」とヌカ㐂びな皆さん、こんにちわ。 さっそくやってみたらいいよ。やればわかるさ、ダァ〜! #1桁の数字だけを検索 \d{1} はい、だめ〜。なんでダメかっていうと、今ヒットしてる所から再検索すると次に続く数字にもヒットしちゃう。野球なら連続ヒットだ。次行ってみよう。 #1桁の数字だけを検索 \b\d\b 惜しいっ! なんで惜しいかっていうと... 「1.234」とか「1,234」なんていう小数点やカンマがあると「.」「,」の手前が単語境界になるから。残念。切腹(古い... #1桁の数字だけを検索 \b\d\b(?![\.,]) これでどうだ? 否定先読みで「.」「,」を含めないようにしてるわけだね。でも「123.4」の「4」にヒットしちゃう。頭隠して尻隠さず。B型のわたしはすでに辛い。 #1桁の数字だけ
簡単な検索置換関数。だれかが必ず書いていそうだけれど、探すのもめんどいのでアップしておきます。こういうぬるい感じが身上なのです。って、みんな知ってるか^^ 普通のテキスト検索置換 ////////////////////////////////////////////テキスト検索置換 /* my_range 検索置換の範囲 my_find 検索オブジェクト ex.) {findWhat:"わたし"} my_change 置換オブジェクト ex.) {changeTo:"ぼく"} */ function my_TextFindChange(my_range, my_find, my_change) { //検索の初期化 app.findTextPreferences = NothingEnum.nothing; app.changeTextPreferences = NothingEnum.
文法をまとめた資料が見つからなくてちょっと苦労したけど,これはべんりだ! 有機化学がらみの植物の本なので,わけのわからん物質名がいっぱい出てくる。そのスジでは入門書という位置づけなので,かな表記のあとに英字がくっついたりして,ばりばりの和欧混植になる。ケルセチン3-O-ルチノシドquercetin 3-O-rutinoside,みたいなかんじ。 当然のことながら,和欧間の4分アキは設定しているので,英字のハイフンと邦字の間にスペースが入る。著者校正で,これをつめろ,という指示が入った。しかし,地の文はもちろん,ここだけとりだしても「ルチノシド」と「quercetin」のあとには4分アキが入ってくれたほうがつごうがいい。だから,和欧間のアキ設定は変えたくない。といって,英文ハイフンの字送りを一括で詰めてしまうと,英数字の間にあるやつがつまりすぎてしまう。 数が多いので見落としも怖い。で,前か
InDesignの正規表現で、後読み(戻り読み)には繰り返しや選択が使えません。これはInDesignの正規表現の仕様です。たとえば下図のようなキャプションの「●」だけに文字スタイルを適用したいときを考えてみましょう。 最初に思いつくのはこんな正規表現です。 (?<=^図\d?\d)● しかし、マッチしません。「(?<=^図\d+)●」なども同様です。後読みの中では繰り返しは使えません。 正規表現クックブックのP95「後読みのさまざまなレベル」に少し解説がありました。ちょっとだけ引用します。 正規表現ソフトウエアは、テキストを左から右に探すように設計されてきました。多くの場合、後読みはちょっとしたハックとして実装されています。後読みに書き込まれた文字数を計算し、その字数分だけ後戻りし、後読み内のテキストと対象テキストを左から右に比較するのです。 要するに、基本的には後読み内のテキストは固定
Perlの正規表現、 \G の項目がどうにも分からん! だって末尾に /g をつけたら最後まで検索しちゃうんでしょ? $html =~ s/\G\s*<h[1-6]>/<span class="dekamoji">/g; みたいなのが何の意味があるのさ? ↑つい二時間前まではこう思ってた。 でも、それは大きなミステイクだった。 \Gもまた、正規表現の能力を単なるマッチや置換から大幅にパワーアップさせてくれる要素だったんだ。 勘違いの始まりは、正規表現を学べば誰もが目にする s///g からだった。 $mojiretsu =~ s/hogehoge/fugafuga/g; とすると、検索文字列 $mojiretsu 中のすべての hogehoge を fugafuga に置換する。 でも、それだけだとあまりよい理解じゃなかったんだ。 s///g と似た形をしている、 m//g というコンテキ
このページは Perl5.6 を対象としています. perl スクリプトは EUC-JP で書かれることを想定しています. このページは 正規表現メーリングリスト を参考に,私が独自にメモとしてまとめたものです. このページの正規表現やスクリプトについての詳しい説明, わかりやすい説明はおそらくできません. このページに書かれているスクリプトは, 個人の責任において実行してください. このページに書かれているスクリプトの 利用・改造は自由 です. その際はどこかにこのページの URI( http://www.din.or.jp/~ohzaki/regex.htm )を参考として記述していただければ幸いです(任意). ご意見・ご感想・ご要望などは にお願いします.こう書いた方がいい, 動かん,わからん,バグってる,これ書け,などなどお待ちしています. このページへの リンクは自由 に張ってく
Javascriptの正規表現置換(replaceメソッド)で後方参照(RegExp.$1とか)を使いたいと思った時、 str = "aaaaaa123aaaaa456aaaa7890" str1 = str.replace(/(\d+)/g, " (" + RegExp.$1 + ") "); //=> aaaaaa () aaaaa () aaaa () なんて書いてもうまくいきません。なぜなら、RegExp.$1は前回の検索時に最後にマッチした後方参照ですから。実際に試してみるとわかります。 str = "aaaaaa123aaaaa456aaaa7890" str1 = str.replace(/(\d+)/g, " (" + RegExp.$1 + ") "); str2 = str.replace(/(\d+)/g, " (" + RegExp.$1 + ") "); //=>
といつも思うので、自分用にメモすることで覚えようという魂胆です。 以下はInDesign CS4の正規表現について記述します(たしかCS3から使えたような気がする)。 結論から 名前 英語で 位置 演算子 後読み lookbehind マッチパターンより前の部分 (?<=) 肯定 (?<!) 否定 先読み lookahead マッチパターンより後の部分 (?=) 肯定 (?!) 否定 肯定の場合はパターンの前が「=」、否定の場合は「!」。 英語を見ると「後読み」「先読み」の訳語も納得できそうな気はするのですが、やっぱりわかりにくいです。背後と前方……とか言うとまた混ざるし! 「つぎの電車」と「こんどの電車」はどっちが早く発車するかみたいな感じに似ていますな。 別に演算子さえ覚えてしまえば名前は意識しなくてもよさそうなのですが、せっかくInDesignには正規表現の記述支援機能がついてるので
2008-05-27 市川せうぞー InDesign CS3の正規表現一覧をまとめてみました。オンラインヘルプよりもちゃんとしてます。間違え、漏れなど見つけた方はご一報ください。 ▼文字を表すもの 正規表現 意味 InDesign拡張 検索のみ InDesignワイルドカード 用例・備考
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く