<>を半角にするマクロNo.21367
ゆふ さん 06/05/28 17:37
 
いつもお世話になっております。

置換のマクロについての質問です。

<sub><sup><b><i><u>
</sub></sup></b></i></u>

上記の<>を半角の<>に統一したいのですが
私が作成したマクロではヒットしない文字が発生します。
欧文の文字は大文字と小文字どちらも検索対象です。
上記のパターン以外は全角の<>のママです。

 replaceallfast "<\\f[sub|sup|b|i|u]\\f>" , "<\\1>" , regular, nocasesense;


 replaceallfast "<\\f[/sub|/sup|/b|/i|/u]\\f>" , "<\\1>" , regular, nocase
sense;

申し訳ありませんが、どなたか教えて下さい。

[ ]
RE:21367 <>を半角にするマクロNo.21368
Buckeye さん 06/05/28 17:50
 
ゆふさん、

> replaceallfast "<\\f[sub|sup|b|i|u]\\f>" , "<\\1>" , regular, nocasesense;
>
>
> replaceallfast "<\\f[/sub|/sup|/b|/i|/u]\\f>" , "<\\1>" , regular, nocase
>sense;

いずれも、[]を使うのが間違いです。or条件で並べたものをひとまとめにするの
だから、パターンをグループ化する()を使います。

Best regards,
Buckeye

[ ]
RE:21367 <>を半角にするマクロNo.21369
アルビレオ さん 06/05/28 18:01
 
ユーザーのアルビレオです。

> replaceallfast "<\\f[sub|sup|b|i|u]\\f>" , "<\\1>" , regular, nocasesense;
>
>
> replaceallfast "<\\f[/sub|/sup|/b|/i|/u]\\f>" , "<\\1>" , regular, nocase
>sense;

[]の中の文字は、「それらのうちどれか一文字」にマッチします。
だから [/sub|/sup|/b|/i|/u] は、 [/sub|pbi] と同じ意味になります。
たとえば <[abc]> がマッチするのは <a> か <b> か <c> であって、
<abc> にはマッチしません。

希望通りの動作をさせるなら
"<\\f(sub|sup|b|i|u)\\f>" と "<\\f/(sub|sup|b|i|u)\\f>"
さらにまとめて
replaceallfast "<\\f/?(sub|sup|b|i|u)\\f>","<\\1>",regular,nocasesense;
とするのがおすすめです。

[ ]
RE:21369 <>を半角にするマクロNo.21370
ゆふ さん 06/05/28 21:41
 
Buckeye さん、アルビレオさんありがとうございます!

根本的に間違って解釈してました。。
<[abc]>は<abc> にマッチするのとばっかり思ってました。

それにひとつの式になるんですね。

みなさんありがとうございました。

[ ]
RE:21370 <>を半角にするマクロNo.21377
ゆふ さん 06/05/29 19:58
 
いつもお世話になってます。
また、分からなくなったので質問します。
内容は続きなのでこのまま質問でよろしいでしょうか?

replaceallfast "<\\f/?[a-zA-Z0-9]+\\f>","<\\1>",regular, nocasesense;

前回の回答を利用して作成してみました。

これでヒットするのは<120>で
<120%><12.0><12/0>はヒットしないようですが、
[]の中に内容以外の文字が1文字でもあるときは、検索の対象にならないのでしょ
うか?

それと、
<\f/?([a-zA-Z0-9]+|表|ストーリー)\f>のように()の中は単語や[]でくくる条
件も()の中に混ぜていいんでしょうか?

基本的なことなんですが、申し訳ありません教えて下さい。

[ ]
RE:21377 <>を半角にするマクロNo.21378
Iranoan さん 06/05/29 20:26
 
 ゆふさん今日は、Iranoan です。
 念の為お断りしておくと、開発者とは何の関わりも無い単なる一ユーザです。
> replaceallfast "<\\f/?[a-zA-Z0-9]+\\f>","<\\1>",regular, nocasesense;
>
> 前回の回答を利用して作成してみました。
>
> これでヒットするのは<120>で
> <120%><12.0><12/0>はヒットしないようですが、
> []の中に内容以外の文字が1文字でもあるときは、検索の対象にならないのでしょ
> うか?
 この場合は、そうです。
 「/?[a-zA-Z0-9]+」の前後に、「<>」が無ければ、
<120%><12.0><12/0>

120  12 0  12 0
にヒットしますが、「<>」を付けることにより「<>」で挟まれていることも条
件になるためです。
 詳しくはヘルプの「キャラクタクラス」を御覧ください。

> <\f/?([a-zA-Z0-9]+|表|ストーリー)\f>のように()の中は単語や[]でくくる条
> 件も()の中に混ぜていいんでしょうか?
 良いです。
 詳しくは、ヘルプの「パターンの論理和」を御覧ください。

[ ]
RE:21377 <>を半角にするマクロNo.21379
アルビレオ さん 06/05/29 20:33
 
アルビレオです。

>replaceallfast "<\\f/?[a-zA-Z0-9]+\\f>","<\\1>",regular, nocasesense;
>
>前回の回答を利用して作成してみました。
>
>これでヒットするのは<120>で
><120%><12.0><12/0>はヒットしないようですが、
>[]の中に内容以外の文字が1文字でもあるときは、検索の対象にならないのでしょ
>うか?

たとえば3桁の数字を検索しようとして [0-9][0-9][0-9] としたのに 12.0 と
か 30/2 にヒットしたら困りますよね。

いきなり複雑なものを試さないで、個々の要素に分解して試してみるとわかりや
すいですよ。
いちいち細かい例を説明するよりも検索ダイアログで正規表現をONにして、どの
ような文字列にヒットするか、期待している文字列にヒットさせるには検索文字
列をどう書けばいいのか試行錯誤を繰り返してみた方がいいと思います。

[ ]
RE:21379 <>を半角にするマクロNo.21380
ゆふ さん 06/05/29 21:47
 
Iranoanさん、アルビレオさんありがとうございます。

もっといろんな検索条件のヒットを試します。
ありがとうございました。

[ ]