键值对的正则表达式包括未转义的空格

时间:2011-07-19 12:03:08

标签: java regex parsing

我需要一个正则表达式来解析属性文件中的键值对,以将它们写入数据库。该应用程序是用java编写的。由于我需要存储有关注释行和空行的信息,因此properties.load对我不起作用

Key是直到第一次出现未转义的空格或等号(包括转义的空格)之前的所有内容。 值是直到行尾的所有内容,但也可以为空。

必须符合以下情况:

  • 键=值
  • 键值
  • key = value value
  • 键值
  • key \ key \ key = value
  • key \ key \ key value

我尝试了以下正则表达式,但它没有正确分离最后两种情况:

^(\\\s|[^\s=]+)+[\s|=](.*)?$

对于最后两个例子,我使用Rubular:

1. key\
2. key\ key value

而不是

1. key\ key\ key
2. value

我也试过了this,但它对我也不起作用

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您希望在检查空间时使用负面的后视(?<!\\\\)\s

^((.*?)((?<!\\\\)\\s|=)(.*?)|(\\w+))$

分解

(.*?)             Match everything non greedy up to the next match
((?<!\\\\)\\s|=)  Match witespace not preceded by \\
(.*?)             Again match everything non greedy up to the next match
|\\w+             Or match strings with no whitespace - this captures case 3 with no value

使用此处的工具http://www.cis.upenn.edu/~matuszek/General/RegexTester/regex-tester.html

测试了每个案例

答案 1 :(得分:0)

尝试(记住这是普通的正则表达式,因此在将其写为Java字符串时必须注意反斜杠转义):

^(\\\s|[^\s=])+(.*)$