Regex PowerShell-替换以获取两个不同字符之间的字符串
我目前正在使用split来获得我需要的,但我希望我能在powershell中使用更好的方法 以下是字符串:Regex PowerShell-替换以获取两个不同字符之间的字符串,regex,powershell,Regex,Powershell,我目前正在使用split来获得我需要的,但我希望我能在powershell中使用更好的方法 以下是字符串: server=ss8.server.com;database=CSSDatabase;uid=WS_CSSDatabase;pwd=abc123-1cda23-123-A7A0-CC54;Max Pool Size=5000 我想在不使用database=或server的情况下获取服务器和数据库= 这是我目前使用的方法,也是我目前正在做的: $databaseserver = (($de
server=ss8.server.com;database=CSSDatabase;uid=WS_CSSDatabase;pwd=abc123-1cda23-123-A7A0-CC54;Max Pool Size=5000
我想在不使用database=或server的情况下获取服务器和数据库=
这是我目前使用的方法,也是我目前正在做的:
$databaseserver = (($details.value).split(';')[0]).split('=')[1]
$database = (($details.value).split(';')[1]).split('=')[1]
这将输出到:
ss8.server.com
CSSDatabase
我希望它尽可能简单
提前感谢您更换方法 您可以使用以下正则表达式替换:
$s = 'server=ss8.server.com;database=CSSDatabase;uid=WS_CSSDatabase;pwd=abc123-1cda23-123-A7A0-CC54;Max Pool Size=5000'
$dbserver = $s -replace '^server=([^;]+).*', '$1'
$db = $s -replace '^[^;]*;database=([^;]+).*', '$1'
技术是匹配和捕获(使用(…)
)我们需要的内容,然后只匹配我们需要删除的内容
图案细节:
-行首^
-文本子字符串server=
-第1组(([^;]+)
所指的内容)匹配除$1
以外的1+字符代码>
-新行以外的任何0+字符,尽可能多*
^
替换为^[^;]*第二个字符中的code>模式带有*?\b
(除换行符以外的任何0+字符,尽可能少,后跟单词边界)
匹配方法
使用-match
,您可以按以下方式进行:
$s -match '^server=(.+?);database=([^;]+)'
$Matches[1]
将包含服务器详细信息,$Matches[2]
将保存数据库信息:
Name Value
---- -----
2 CSSDatabase
1 ss8.server.com
0 server=ss8.server.com;database=CSSDatabase
图案细节
^
-字符串的开头
server=
-文字子字符串
(.+?)
-第1组:任何1+非换行符尽可能少
;数据库=
-文字子字符串
([^;]+)
-1+字符,而不是代码>
另一个具有正则表达式和命名捕获组的解决方案,类似于Wiktor的匹配方法
$s = 'server=ss8.server.com;database=CSSDatabase;uid=WS_CSSDatabase;pwd=abc123-1cda23-123-A7A0-CC54;Max Pool Size=5000'
$RegEx = '^server=(?<databaseserver>[^;]+);database=(?<database>[^;]+)'
if ($s -match $RegEx){
$Matches.databaseserver
$Matches.database
}
$s='server=ss8.server.com;数据库=CSSDatabase;uid=WS_CSSDatabase;pwd=abc123-1cda23-123-A7A0-CC54;最大池大小=5000'
$RegEx='^server=(?[^;]+);数据库=(?[^;]+)'
如果($s-匹配$RegEx){
$Matches.databaseserver
$Matches.database
}
哇,谢谢你!只有一件事,如果我想在说“database=”或“server=”不存在时陷阱,我如何警告match语句或replace语句。@Stealthmat您可以使用$a.Contains(“server=”)
方法。或者在使用匹配方法时,检查$Matches
是否实际具有任何值。