我有以下数学表达式ii*3+(ii*2)+xdii+13-ii-ii-4
,我想替换变量ii
的每次出现ii[x]
。显然 xdii 不能被替换,因为它是另一个变量。
问题是结果输出是:ii[x]*3+(ii[x]*2)+xdii+13-ii[x]-ii-4
. 所以我的问题是,当正则表达式引擎替换它时,-ii-ii
它只会替换这两个连续匹配的第一次出现。这是我的正则表达式,
's/([\+\*\-\s\(]|^)ii([\+\*\-\s\)])/$1ii[x]$2/'
如果数学表达式在这两个连续的之间有一个额外的空间,那么结果将是正确的。例如:ii*3+(ii*2)+xdii+13-ii- ii-4
产生正确的答案。
如果它有助于我在引擎第二次出现时附加正则表达式调试内部输出-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
提前致谢,