正規表現を使用した置換で、直前に特定の文字列がない場合にのみ置換するには?


mady  2003-11-14 01:50:43  No: 80430

正規表現を使用した置換で、直前に特定の文字列がない場合にのみ置換するには?

例えば、任意の文字列aaをbb等に変えたいと思っています。(本当は太字にしたい)
しかし、リッチテキストを直接いじっているのですがRTFでは、2バイト文字は
\\\'[0-9a-z][0-9a-z]\\\'[0-9a-z][0-9a-z]の形でエンコードされます。

すなわち
【1】aa

\'81\'791\'81\'7aaa
と表現されるわけですが

\'7aのaにヒットしてしまい、壊れてしまうんです。

今のソースは大体こんな感じです。
    Dim objRegExp As New regExp                                     '正規表現オブジェクトを作成

    Dim strExpression As String
    Dim strReplaceWith As String
    Dim strPattern As String

    strPattern = "(\\\'[0-9a-f][0-9a-f])" + "(" + rtfEnc(dic.Item("separateString")) + ")"
    strReplaceWith = "$1\b " + "$2" + "\b0 "
    strExpression = rtfRead
    
    objRegExp.Pattern = strPattern                         '検索パターンの設定
    objRegExp.IgnoreCase = True                            '大文字小文字区別の設定(区別する)
    objRegExp.Global = True                                '置換候補の設定(文字列内のすべてのマッチにテストする)
    
    strExpression = objRegExp.Replace(strExpression, strReplaceWith) 'Replace メソッドで文字列の置換
    
    .TxtBodyFileContents.TextRTF = strExpression

「前に…がない場合のみ」ってよくありそうなものだと思うのですが、
これって正規表現を使用して1回の処理で行うことは可能でしょうか?
もしできるなら、よろしくお願いします。


mady  2003-11-14 01:54:04  No: 80431

すみません、独自関数が含まれていました。
まんなか辺の、

rtfEnc(dic.Item("separateString"))

は、全角をRTF形式に変換する関数です。
そんなことはいいのですが、この関数が
置換したい文字列そのものだと思ってください。

よろしくお願いします。


mady  2003-11-14 02:32:11  No: 80432

たびたび訂正です。

「直前に特定の文字列がない場合にのみ」
というのは誤解を招きやすい表現ですね。

文字列αと文字列βがあって
αがあったときにはそれを無視し、βのみを対象とする。
αがなければβそのものが対象となるのです。

もっと分かりにくいかもしれませんね…すみません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加