我有这个文本文件:
[Tabs]
MAILBOXSEND=1
MAILBOX=8
USERS=6
DOCUMENTS_Q=9
MED_WEBSERVCALLS_LOA=3
FCLMNA=1
INCZOOMFORM=1
USERSB=1
USERSB_ONE=1
DATAPRIV=1
MED_WEBSERVCALLS=2
TINVOICES=1
PORDERS=9
PORDERSTOTAL=1
LOGPART=1
LOGCOUNTERS=1
PARTMSG=1
[External Mail]
Send=Y
Hostname=Server
Domain=Domain
Myemail=My@email.com
MyName=My Test
Port=25
SSL=0
[Search]
SUPPLIERS=5,1
StartButton=1
Ignore Case=0
PART=6,1
我正在 try catch [External Mail]
到下一个 []
Brackets Group 之间的所有文本,
我有这个 Regex 可以完成工作并在 Regex101 中进行了测试,在所有测试之后我发现它在 powershell 中不起作用:
$Text = Get-Content c:\text.txt
$Text -match '(?s)(?<=\[External Mail\]).*?(?=\[.*?\])'
or:
$Text | Select-String '(?s)(?<=\[External Mail\]).*?(?=\[.*?\])'
没有返回
你知道我错过了什么吗?
谢谢
请您参考如下方法:
看起来您正在解析 .INI 文件。不要试图再次发明轮子,利用 existing code .此解决方案将 .Ini 文件读取为易于使用的嵌套哈希表。
在链接失效的情况下,这是脚本专家存档中的函数:
function Get-IniContent ($filePath)
{
$ini = @{}
switch -regex -file $FilePath
{
"^\[(.+)\]" # Section
{
$section = $matches[1]
$ini[$section] = @{}
$CommentCount = 0
}
"^(;.*)$" # Comment
{
$value = $matches[1]
$CommentCount = $CommentCount + 1
$name = "Comment" + $CommentCount
$ini[$section][$name] = $value
}
"(.+?)\s*=(.*)" # Key
{
$name,$value = $matches[1..2]
$ini[$section][$name] = $value
}
}
return $ini
}
# Sample usage:
$i = Get-IniContent c:\temp\test.ini
$i["external mail"]
Name Value
---- -----
Domain Domain
SSL 0
Hostname Server
Send Y
MyName My Test
Port 25
Myemail My@email.com
$i["external mail"].hostname
Server