我需要使用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"
答案 0 :(得分:1)
由于有人可以创建;Password=
之类的密码,因此您的字符串实际上是;Password=;Password=;
,因此总会有一些方法可以解决您的代码。
假设这是不可能的(并且还假设某人不可能使用类似的变体,例如密码的部分采用以下格式;s=
,其中s
是任何单词或空格字符) ,这应该适合你。
(?<=;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>; unicode=True"
pA&-pass
pass>
(?<=;Password=)
肯定的背后隐藏确保匹配;Password
字面上的内容(?:(?!;[\w ]+=).)*
Tempered greedy token匹配任何字符,但确保其与;
不匹配,后跟任何字或空格字符,后跟=