只有一个参数的名称值而不是下一个参数的名称值

时间:2014-08-20 14:27:29

标签: java regex

我有一个字符串,它可以是格式为

的字符串
name=tony, age=49, address=france, plan=complete

name=tony, age=49, address="france", plan="complete"

name='tony', age=49, address='france', plan='complete'

name:"tony", age:49, "address":"france", "plan":"complete"

name:"tony", age:49, "address": "france", "plan":"complete"

我试图匹配地址=法国的各种排列。在地址之前我不需要引用或双引号。

在Java中,我这样做:

address"['\"]?[:=]['\"]?[^'\"]+['\"]?"

但这与String的结尾匹配,因此它包含plan:complete。

关于如何结束比赛的任何提示?它应该寻找一个commo,或者如果没有逗号是行尾,或者在下一个=:

的第一个

3 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式匹配所有5种情况的地址france

address['"]? *[=:] *['"]?([^'",]+)

RegEx Demo

答案 1 :(得分:1)

我的建议是使用更复杂的正则表达式,这将允许您在字符串中找到任何值。将此片段应用于java regexp dialect。

查找所有值:

/[=:]\s*['"]?([\w ]+)['"]?(?:,|$)/gm

DEMO

对于某些键(f.e.地址):

  

/ \ baddress ['“]?\ s * [=:] \ s * ['”]?([\ w] +)['“]?(?:,| $)/ gm

DEMO

答案 2 :(得分:0)

在所有情况下,地址都在第二个和第三个逗号之间,因此您也可以进行拆分;

String longstring = "name:\"tony\", age:49, \"address\": \"france\", \"plan\":\"complete\"";        
String splitted[] = longstring.split(",");
String Address = splitted[2];
System.out.println(Address);