描述
我需要一个正则表达式来匹配xml文件的键/值条目的“值”中的所有内容,如果它在该行中找到某个文本。
问题
对于示例测试字符串:
<add key="myDatabase" value="Server=abc-lsatdm094\devbox1;Database=myDB;User Id=xxxxxx;Password=xxxxxx;" />
我需要匹配所有价值:
Server=abc-lsatdm094\devbox1;Database=myDB;User Id=xxxxxx;Password=xxxxxx;
IF 且仅当该行包含“mydb”
时我的正则表达式尝试
(?<=(Server=)|(Data Source=))[^;]*
.*(D|d)atabase=(M|m)(Y|y)(D|d)(B|b).*
其他测试字符串
<add key="myDatabase" value="Data Source=abc-lsatdm094\devbox1;Database=myDB;User Id=xxxxxx;Password=xxxxxx;" />
<add key="myDatabase" value="User Id=xxxxxx;Password=xxxxxx;Data Source=abc-lsatdm094\devbox1;Database=mydb;" />
<add key="myDatabase-DatabaseConnectionString" value="Server=abc-lsatdm094\devbox1;Database=myDB;User Id=xxxxxx;Password=xxxxxx;" />
<add key="myDatabase-DatabaseConnectionString" value="Data Source=$LocalInstance; database=myDb; Trusted_Connection=True;" />
<add key="myDatabase-databaseConnectionString" value="database=mydb; Trusted_Connection=True;Data Source=$LocalInstance;" />
答案 0 :(得分:1)
我实际上在发布时找到了解决方案:
(?<=value=").*(M|m)(Y|y)(D|d)(B|b).*;
<强>击穿强>
(?<=value=")
这部分是“看后面”。因此,文本必须包含value="
这是“匹配”但不包含在捕获组中。
.*
这表示匹配所有(现在)
(M|m)(Y|y)(D|d)(B|b)
这表示匹配mydb
(大写和小写)
.*;
并继续捕获,直到;