次の数式があり、変数のii*3+(ii*2)+xdii+13-ii-ii-4
すべての出現箇所を に置き換えたいと考えています。xdii は別の変数であるため、明らかに置き換えてはなりません。ii
ii[x]
問題は、結果の出力が次のようになることですii[x]*3+(ii[x]*2)+xdii+13-ii[x]-ii-4
。したがって、私の問題は、正規表現エンジンが置き換えられるときに、-ii-ii
それらの2つの連続した一致の最初の出現のみが置き換えられることです。これが私の正規表現です。
's/([\+\*\-\s\(]|^)ii([\+\*\-\s\)])/$1ii[x]$2/'
数式でこれら 2 つの連続する文字の間に余分なスペースが 1 つある場合、結果は正しくなります。例:ii*3+(ii*2)+xdii+13-ii- ii-4
正しい答えが得られます。
それが役立つ場合、エンジンが2回目の出現に達したときに正規表現デバッグ内部出力を追加しています-ii-ii
Guessing start of match, REx `([\+\*\-\s\(]|^)ii([\+\*\-\s\)])' against `ii-4'...
Found floating substr `ii' at offset 0...
Guessed: match at offset 0
Matching REx `([\+\*\-\s\(]|^)ii([\+\*\-\s\)])' against `ii-4'
Setting an EVAL scope, savestack=0
23 <i+13-ii-> <ii-4> | 1: OPEN1
23 <i+13-ii-> <ii-4> | 3: BRANCH
Setting an EVAL scope, savestack=7
23 <i+13-ii-> <ii-4> | 4: ANYOF[\11-\15 (*+\-]
failed...
23 <i+13-ii-> <ii-4> | 15: BOL
failed...
Clearing an EVAL scope, savestack=0..7
Match failed
前もって感謝します、