如何使用正则表达式在数据连接中获取密码值

时间:2018-01-02 16:13:23

标签: regex

我需要使用regex从db连接字符串中获取密码值。

这是我目前的正则表达式.*;(?i)Password=([^;]*)。 仅当密码中没有任何;个字符时,此方法才有效。

add key="myKey" value="Data Source=MyDataSource;Initial Catalog=MyDB;User ID=test-user;Password=pA&-pass; unicode=True"

但如果密码中有;个字符

,则会失败
add key="myKey" value="Data Source=MyDataSource;Initial Catalog=MyDB;User ID=test-user;Password=pass>; unicode=True"

1 个答案:

答案 0 :(得分:1)

由于有人可以创建;Password=之类的密码,因此您的字符串实际上是;Password=;Password=;,因此总会有一些方法可以解决您的代码。

假设这是不可能的(并且还假设某人不可能使用类似的变体,例如密码的部分采用以下格式;s=,其中s是任何单词或空格字符) ,这应该适合你。

代码

See regex in use here

(?<=;Password=)(?:(?!;[\w ]+=).)*

结果

输入

add key="myKey" value="Data Source=MyDataSource;Initial Catalog=MyDB;User ID=test-user;Password=pA&-pass; unicode=True"
add key="myKey" value="Data Source=MyDataSource;Initial Catalog=MyDB;User ID=test-user;Password=pass&gt;; unicode=True"

输出

pA&-pass
pass&gt;

说明

  • (?<=;Password=)肯定的背后隐藏确保匹配;Password字面上的内容
  • (?:(?!;[\w ]+=).)* Tempered greedy token匹配任何字符,但确保其与;不匹配,后跟任何字或空格字符,后跟=