正则表达式来选择文本x如果发现文字ÿ [英] Regex to select text X if it finds text Y

查看:248
本文介绍了正则表达式来选择文本x如果发现文字ÿ的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

说明



我需要一个正则表达式中的一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆