正则表达式来选择文本x如果发现文字ÿ [英] Regex to select text X if it finds text Y
问题描述
说明
我需要一个正则表达式中的一个xml文件,如果一个键/值项的价值相匹配的一切它发现该行中的某个文本。
问题
有关的例子测试字符串:
<添加键=MYDATABASEVALUE =服务器= ABC-lsatdm094\devbox1;数据库= MYDB ;用户ID = XXXXXX,密码= XXXXXX; />
我需要匹配的一切有价值的东西:
服务器= ABC-lsatdm094\devbox1;数据库= MYDB;用户ID = XXXXXX,密码= XXXXXX;
如果且仅当该行包含mydb的
我的正则表达式表达尝试
-
(?< =(服务器=)|(数据源=))[^;] *
-
*(D | D)atabase =(M | M)(Y | Y)(D | D)(b |。b)*
其他测试字符串
<添加键=MYDATABASE值= 数据源= ABC-lsatdm094\devbox1;数据库= MYDB;用户ID = XXXXXX,密码= XXXXXX; />
<添加键=MYDATABASEVALUE =用户ID = XXXXXX,密码= XXXXXX;数据源= ABC-lsatdm094\devbox1;数据库= MYDB; />
<添加键=MYDATABASE-DatabaseConnectionStringVALUE =服务器= ABC-lsatdm094\devbox1;数据库= MYDB;用户ID = XXXXXX,密码= XXXXXX; />
<添加键=MYDATABASE-DatabaseConnectionString值=数据源= $ LocalInstance;数据库= MYDB; Trusted_Connection = TRUE; />
<添加键=MYDATABASE-databaseConnectionStringVALUE =数据库= MYDB; Trusted_Connection = TRUE;数据源= $ LocalInstance; />
我居然找到了一个解决方案,这是我正要至后:(?< =值=)。
*(M | M)(Y | Y)(D | D) (b | b)*;
故障
(小于?=值=)
这部分是向后看。所以文字必须包含值=
这是匹配,但不包括在捕获小组。
。*
这说来匹配所有(现在)
(M | M)(Y | Y)(D | D)(b | b)
这是说,以匹配 MYDB
(大写和小写)
。*;
和继续拍摄,直到;
Description
I need a regex expression to match everything in the "value" of a key/value entry of an xml file if it finds a certain text within that line.
Problem
For the example test string:
<add key="myDatabase" value="Server=abc-lsatdm094\devbox1;Database=myDB;User Id=xxxxxx;Password=xxxxxx;" />
I need to match everything in value:
Server=abc-lsatdm094\devbox1;Database=myDB;User Id=xxxxxx;Password=xxxxxx;
IF and only if the line contains "mydb"
My Regex Expression Attempts
(?<=(Server=)|(Data Source=))[^;]*
.*(D|d)atabase=(M|m)(Y|y)(D|d)(B|b).*
Additional Test Strings
<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;" />
I actually found a solution to this as I was about to post:
(?<=value=").*(M|m)(Y|y)(D|d)(B|b).*;
Breakdown
(?<=value=")
This portion is the "look behind". So the text must contain value="
This is "matched" but not included in the capture group.
.*
This says to match all (for now)
(M|m)(Y|y)(D|d)(B|b)
This says to match mydb
(uppercase and lowercase)
.*;
and continue capturing until the last instance of ;
这篇关于正则表达式来选择文本x如果发现文字ÿ的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!