我需要一个正则表达式来解析属性文件中的键值对,以将它们写入数据库。该应用程序是用java编写的。由于我需要存储有关注释行和空行的信息,因此properties.load对我不起作用
Key是直到第一次出现未转义的空格或等号(包括转义的空格)之前的所有内容。 值是直到行尾的所有内容,但也可以为空。
必须符合以下情况:
我尝试了以下正则表达式,但它没有正确分离最后两种情况:
^(\\\s|[^\s=]+)+[\s|=](.*)?$
对于最后两个例子,我使用Rubular:
1. key\
2. key\ key value
而不是
1. key\ key\ key
2. value
我也试过了this,但它对我也不起作用
提前感谢您的帮助!
答案 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=])+(.*)$