Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用正则表达式解析字符串_Java_Regex - Fatal编程技术网

Java 用正则表达式解析字符串

Java 用正则表达式解析字符串,java,regex,Java,Regex,我有一串 "name"=>"3B Ae", "note"=>"Test fddd \"33 Ae\" FIXME", "is_on"=>"keke, baba" 我想用java程序把它解析成 name 3B Ae note Test fddd \"33 Ae\" FIXME is_on keke, baba 注意,字符串的内容,即name,3B Ae,不是固定的。 有什么建议吗?由于引用规则,我不确定正则表达式(即使是具有负lookbehinds的PCRE)是否能够一致地解

我有一串

"name"=>"3B Ae", "note"=>"Test fddd \"33 Ae\" FIXME", "is_on"=>"keke, baba"
我想用java程序把它解析成

name
3B Ae
note
Test fddd \"33 Ae\" FIXME
is_on
keke, baba
注意,字符串的内容,即
name
3B Ae
,不是固定的。
有什么建议吗?

由于引用规则,我不确定正则表达式(即使是具有负lookbehinds的PCRE)是否能够一致地解析它。您可能希望使用一个或其他能够处理上下文无关语言的解析器。

由于引用规则,我不确定正则表达式(即使是具有负lookbehinds的PCRE)是否能够一致地解析此内容。您可能需要使用一个或其他能够处理上下文无关语言的解析器。

如果您:

  • 替换=>为:
  • 用{}包装整个字符串
结果如下所示,这是有效的JSON。然后可以使用JSON解析器(例如,GSON或Jackson)将这些值解析为java对象

{
    "name": "3B Ae",
    "note": "Test fddd \"33 Ae\" FIXME",
    "is_on": "keke, baba"
}
如果您可以控制生成此字符串的过程,我强烈建议您使用标准格式,如JSON或XML,以便在另一端更容易解析。

如果您:

  • 替换=>为:
  • 用{}包装整个字符串
结果如下所示,这是有效的JSON。然后可以使用JSON解析器(例如,GSON或Jackson)将这些值解析为java对象

{
    "name": "3B Ae",
    "note": "Test fddd \"33 Ae\" FIXME",
    "is_on": "keke, baba"
}

如果您可以控制生成此字符串的过程,我强烈建议您使用标准格式,如JSON或XML,以便在另一端更容易解析。

如果您可以确保数据(键或值)没有
=>
(或找到一些不会出现的其他分隔符),解决方案非常简单:

  • 将字符串按
    拆分,
    您将获得
    键=>值
  • =>
    拆分键
    值=>对
如果
inputString
保持
“name”=>“3B Ae”,“note”=>“Test fddd\”33 Ae\“FIXME”,“正在”=>“keke baba”

(例如来自文件)
(我已将
更改为
keke
baba
之间)


如果您可以确保数据(键或值)没有
=>
(或找到一些不会出现的其他分隔符),那么解决方案非常简单:

  • 将字符串按
    拆分,
    您将获得
    键=>值
  • =>
    拆分键
    值=>对
如果
inputString
保持
“name”=>“3B Ae”,“note”=>“Test fddd\”33 Ae\“FIXME”,“正在”=>“keke baba”

(例如来自文件)
(我已将
更改为
keke
baba
之间)


您的示例是一个输入字符串还是多个输入字符串?您的示例是一个输入字符串还是多个输入字符串?这真的很聪明(捕捉得很好),但是如果他不控制输入字符串呢?这真的很聪明(捕捉得很好),但是如果他不控制输入字符串呢,不会给出name=>值对,因为逗号可能出现在值内(例如“keke,baba”)@Moe,yes。如果您可以确保您的数据(键或值)没有a=>或a,并且我明确提到(我已将,改为;从keke和baba之间),那么我的答案就是这样开始的。如果OP对数据有控制权,这应该很容易做到,而且我认为这更简单(JSON的想法很酷),通过拆分,不会给出name=>值对,因为逗号可能出现在值内部(例如“keke,baba”)@Moe,yes。如果您可以确保您的数据(键或值)没有a=>或a,并且我明确提到(我已将,改为;从keke和baba之间),那么我的答案就是这样开始的。如果OP可以控制数据,这应该很容易做到,而且我认为这更简单(不过JSON的想法很酷)