我有很多字符串,例如:
"book = 12 AND x2 = 50 AND cost = 45"
"pen = 1 AND case = 10 AND bala = 40"
...
我需要获取book
,x2
和cost
。
还有pen
,case
,bala
我用这个,但是不起作用:
(?:(.*?)(?==))+
我不需要'='之后的值;我需要在'='之前输入名称。
答案 0 :(得分:3)
您可以使用
\w+(?=\s*=)
请参见regex demo
详细信息
\w+
-1个或多个字母,数字或_
(要仅匹配字母和数字,请使用\p{Alnum}
)(?=\s*=)
-后面跟着0+空格,然后是=
字符(因为(?=...)
是一个正向超前字符,需要其模式立即与当前位置的右边匹配)。请参见Java demo:
String s = "book = 12 AND x2 = 50";
Pattern pattern = Pattern.compile("\\w+(?=\\s*=)");
Matcher matcher = pattern.matcher(s);
List<String> res = new ArrayList<>();
while (matcher.find()){
res.add(matcher.group(0));
}
System.out.println(res);
// => [book, x2]
答案 1 :(得分:1)
您仅需使用一行代码即可捕获它们:
String [] cols = str.split("\\s*=.*?(?=$|\\w+\\s*=)");
此拆分的正则表达式不是匹配列名称,而是匹配列名称之间的 。
测试代码:
String str = "book = 12 AND x2 = 50 AND cost = 45";
String[] cols = str.split("\\s*=.*?(?=$|\\w+\\s*=)");
System.out.println(Arrays.toString(cols));
输出:
[book, x2, cost]