2012-08-28 27 views
0

我期待更改下面的代码:正则表达式的问题 - 找到确切的变量

x = 0; 
      dx = (val - (x * x))/(2.0 * x); 
      x = x + dx; 
      diff = val - (x * x); 
      x = x; 
return (x); 

到:

VARIABLE_TO_MONITOR_x = 0; 
       dx = (val - (VARIABLE_TO_MONITOR_x * VARIABLE_TO_MONITOR_x))/(2.0 * VARIABLE_TO_MONITOR_x); 
       VARIABLE_TO_MONITOR_x = VARIABLE_TO_MONITOR_x + dx; 
       diff = val - (VARIABLE_TO_MONITOR_x * VARIABLE_TO_MONITOR_x); 
       VARIABLE_TO_MONITOR_x = VARIABLE_TO_MONITOR_x; 
    return (VARIABLE_TO_MONITOR_x); 

目前我使用:

strLine.matches("^.*(?<![a-zA-Z])" +variableN[1] + "(?![a-zA-Z]).*$") 

但这返回以下内容:

VARIABLE_TO_MONITOR_x = 0; 
      dVARIABLE_TO_MONITOR_x = (val - (VARIABLE_TO_MONITOR_x * VARIABLE_TO_MONITOR_x))/(2.0 * VARIABLE_TO_MONITOR_x); 
      VARIABLE_TO_MONITOR_x = VARIABLE_TO_MONITOR_x + dVARIABLE_TO_MONITOR_x; 
      diff = val - (VARIABLE_TO_MONITOR_x * VARIABLE_TO_MONITOR_x); 
      VARIABLE_TO_MONITOR_x = VARIABLE_TO_MONITOR_x; 
return (VARIABLE_TO_MONITOR_x); 

我怎样才能调整这个正则表达式来捕获不是我特别想找的变量的实例?这捕获其中变量包含在另一个词中的实例...

任何帮助将不胜感激..

正则表达式的小白..

编辑: 这里是替换为代码以及..

if (strLine.matches("^.*(?<![a-zA-Z])" + variableN[1] + "(?![a-zA-Z]).*$")) 
{ 
    strLine = strLine.replace(variableN[1], VARIABLES + variableN[1]); 
} 
+3

arggggg,我的眼睛!我的眼睛!!! –

+0

:)我觉得同样的方式... dx单独与其他'x'变量一起更改.. – BigBug

+2

请考虑使用符合Java标准的较短变量名称。没有必要为自己做更难的事情,更重要的是,为了我们。 –

回答

4
\b 

这是一个伟大的时刻用 “单词边界”!

strLine.split("\\b" +variableN[1] + "\\b"); 

将返回一个由您的变量名称精确分解的线段数组。 “\ b”匹配单词的边缘。

然后,您可以使用新变量名一次将其打印出来,将它粘在一起。或更好:

strLine.replaceAll("\\b" +variableN[1] + "\\b", "VARIABLE_TO_MONITOR_" + variableN[1]); 

将做所有的替代你!

+0

哦,哇,那真是太酷了。谢谢! +1和最佳答案 – BigBug