我一直在努力研究这个,但我很难找到相关的帖子。我们为我们的一项服务使用配置文件,如下所示(请注意,一些名称在哈希后有空格,一些有参数):
#GetContactDetails
GetContactDetails.XXXXUser=USERNAME
GetContactDetails.XXXXPassword=PASSWORD
GetContactDetails.TestFlag=Y
GetContactDetails.EndPointURL=http://111.99.111.999/ENVNAME2/endpoint.xx
GetContactDetails.Timeout=40000
GetContactDetails.LoggingFlag=Y
# GetContactDetails
GetContactDetails.XXXXUser=USERNAME
GetContactDetails.XXXXPassword=PASSWORD
GetContactDetails.TestFlag=Y
GetContactDetails.EndPointURL=http://111.99.111.999/ENVNAME2/endpoint.xx
GetContactDetails.Timeout=40000
GetContactDetails.LoggingFlag=Y
# GetContactDetails Parameters
GetContactDetails.XXXXUser=USERNAME
GetContactDetails.XXXXPassword=PASSWORD
GetContactDetails.TestFlag=Y
GetContactDetails.EndPointURL=http://111.99.111.999/ENVNAME2/endpoint.so
GetContactDetails.Timeout=40000
GetContactDetails.LoggingFlag=Y
基本上有 4 种不同的变体:
#servicename
# servicename
#servicename parameters
# servicename parameters
我希望能够在此文本文件上运行替换,留下每个服务的名称(只是以 # 开头的行)。这意味着我需要识别任何不等于 # 行模式的东西。所有的组合我都试过了,我无法让它识别其他所有东西。
有什么建议吗?
附言(来自评论)
我希望使用正则表达式,因为现有的 Java 服务可以使用正则表达式进行替换。要沿着这条路走下去,需要编写一个 Java 服务并部署它,尽管这不是一项太大的任务,但我想尽可能避免它。
最佳答案
Search: ^[^#].*[\r\n]*
Replace: <blank>
关键部分是^[^#]
,意思是“第一个字符不是hash”
您需要 [\r\n]*
也匹配换行符(点不匹配换行符),否则您将留下空行(而不是删除它们)。
关于java - 多行配置文件中的正则表达式,不等于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38010034/