3

@記号の後にない限り、「STR」などの3文字を選択して置き換えたいと思います。

replace メソッドでテキスト バッファー クラスを使用します。3 文字を置換できますが、3 文字の前の文字も置換されます。

これは私のコードです:

static void simpleReplace(Args _args)
{
    TextBuffer txtb = new TextBuffer();         

    txtb.setText(" STR @STR #STR");
    txtb.regularExpressions(true);

    txtb.replace("[^@]STR", "FOO");
    info(txtb.getText());        
}

結果は「FOO @STR FOO」です。

私が望む結果は、" FOO @STR #FOO" で、スペースと # はそのままです。

問題は、4 つの文字を一致させているが、3 つだけを置き換えたいということだと思います。非キャプチャ グループまたはいくつかのルックアラウンドが必要だと思います。Debuggex で次の式を試しました。

[^@](?:(STR))

正規表現の視覚化

Debuggex デモ

これは機能しているようで、@ の後に 3 文字が続く場合は選択されますが、Dynamics AX ではサポートされていないようです。X++ RegEx サポートについてこのページを見ましたが、問題を解決する構文が見つかりませんでした。

上記のジョブを変更して、「 FOO @STR #FOO」という出力が得られるようにすることは可能ですか?

4

1 に答える 1