不能正常表达

时间:2015-10-23 18:53:14

标签: java android regex

我有字符串正则表达式
"product_default_shipping_cost:\['(.*)'"

和字符串

"product_sale_price:['19.99'], product_default_shipping_cost:['1.99'], product_type:['Newegg']"

我希望只获得1.99。 我的代码:

Pattern pattern = Pattern.compile(regex_string);
Matcher m = pattern.matcher(html);

while (m.find()) {
   for (int i = 1; i <= groupCount; i++) {
      Log.w(TAG,m.group(i));
   }
}

但我有1.99'], product_type:['Newegg'] 奇怪的是它的正则表达式在python和SWIFT中完美运行但不是java。我无法改变这种规律。可能是什么问题以及如何解决它?

P.S我真的无法改变这种规律,需要动态

3 个答案:

答案 0 :(得分:2)

尝试将其更改为:

product_default_shipping_cost:\['(.*?)'

.*?是懒惰的,只会尝试匹配第一个'

答案 1 :(得分:2)

String[] myStringArray = {"Hello","World"}; for(String s : myStringArray) { //Do something } 将匹配尽可能多的字符(“贪婪”)。

您可以使用非gready .*,也可以限制匹配的内容:.*?

答案 2 :(得分:1)

您正在使用greedy正则表达式.*,尝试使用非贪婪,也称为lazy,附加{{1} ,即:

?
product_default_shipping_cost:\['(.*?)'\]

<强>样本

https://regex101.com/r/aF1hI6/1

关于greedy and lazy regex

的好解释