如果找到文本Y,则正则表达式选择文本X.

时间:2016-05-24 14:37:18

标签: c# regex

描述

我需要一个正则表达式来匹配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;" />

1 个答案:

答案 0 :(得分:1)

我实际上在发布时找到了解决方案:

(?<=value=").*(M|m)(Y|y)(D|d)(B|b).*;

<强>击穿

(?<=value=")

这部分是“看后面”。因此,文本必须包含value="这是“匹配”但不包含在捕获组中。

.*

这表示匹配所有(现在)

(M|m)(Y|y)(D|d)(B|b)

这表示匹配mydb(大写和小写)

.*;

并继续捕获,直到;

的最后一个实例