my defination arabive:
. Альфаноковые значения только < /p>
2) должны быть как минимум 1 char или более < /p>
3) не могут начинаться с цифры, должны начинаться с [a-za-z] < /p>
4), например, «x», может быть окружена этой строкой (x). «Свойство (x)» < /p>
my -текущий метод и regex (в некоторых случаях работает только): < /strong> < /p>
public Set extractUniqueVarsFromExpression(String expression) {
Set varsSet = null;
Pattern p = null;
Matcher m = null;
System.out.println(expression);
if (expression != null) {
varsSet = new java.util.LinkedHashSet();
//"[A-Za-zPROPERTY(?)_][A-Za-z0-9PROPERTY(?)_]*||[A-Za-z_][A-Za-z0-9_]*"
//"[[A-Za-z_][A-Za-z0-9_]*"
p = Pattern.compile("[A-Za-zPROPERTY(?)_][A-Za-z0-9PROPERTY(?)_]*||[A-Za-z_][A-Za-z0-9_]*",
Pattern.CASE_INSENSITIVE);
m = p.matcher(expression);
while (m.find()) {
String group = m.group().trim();
//do not add duplicates
if (!varsSet.contains(group))
{
varsSet.add(group);
System.out.println(" Variable : " + group);
}//end if not duplicate
}// end while
}
System.out.println();
return varsSet;
}
< /code>
Примеры /случаи: < /strong> < /p>
ex #1: < /strong> < /p>
Вход: [(ibdweew /ibdheight) * ibdHeight] * 703 < /p>
< /p>
Переменная: свойство (ibdween) < /p>
Переменная: свойство (ibdheight) < /p>
ex #2: < /strong> < /p>
ibdight /ibelight /ibelight /ibelight * 703 < /p>
Вывод: < /p>
Переменная: ibdween < /p>
Переменная: ibdheight < /p>
ex #3: < /plound> < /p>
ex #3: < /plound> < /p>
ex #3: < /prosge> < /p>
ex #3: < /prolge> < /p>
. [Property (ibdheight) * Property (ibdheight)] * 703 < /p>
Вывод: < /p>
Переменная: свойство (ibdweew) < /p>
variable: property (ibdhewight) < /p>
variable: property (ibdhewight) < /br />
exthewight) < /br />
variable: extheight) #:4
These are the cases that don’t work (examples 4 to 6):
The problem is the parenthesis are being picked up as variables:
Input: ( Mass * ( Acceleration + whatever ))
output: < /p>
переменная: (< /p>
Переменная: масса < /p>
Переменная: ускорение < /p>
varia />
ex #: 5 < /strong> < /p>
Проблема состоит в том, что скобки поднимаются как переменные: < /strong> < /p>
Вход: (базовая высота * высота) /2 < /p>
< /p>
(< /p>
variable: base < /p>
переменная: высота < /p>
variable
x #: 6 < /pronge> < /p>
. OR attached to a variable:
Input: [((( var * var2 ) var3 ) + ( var1 / var4 ) var5) / var6 ]
Output:
Variable : (((
Variable : var
Variable : var2
Variable : )
Variable : var3
Variable : (
Variable : var1
Variable : var4 < /p>
переменная: var5) < /p>
переменная: var6 < /p>
Подробнее здесь: https://stackoverflow.com/questions/112 ... expression