regex 在PowerShell中使用正则表达式提取子字符串

7nbnzgx9  于 2023-06-30  发布在  Shell
关注(0)|答案(3)|浏览(101)

我如何对字符串进行正则化并提取\]之间的最后一个子字符串,而不是拆分字符串?
示例:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server\anyLongString]
uyhoqukh

uyhoqukh1#

一种方法是:

$a = "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server\anyLongString]"
$a -match '([^\\]*)]$'
$matches[1]
anyLongString
dphi5xsq

dphi5xsq2#

另一种方法是使用更少的代码行:

$a = "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server\anyLongString]"
$a -Replace '^.*\\([^\\]+)]$', '$1'
zpgglvta

zpgglvta3#

我的解决方案是:

$a = ('[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server\anyLongString]' `
| Select-String -Pattern '([^\\]+)(?=])').Matches.Value

它使用Select-String查找第一个匹配项,然后使用.Matches.Value属性获取子字符串。
我更喜欢这样,因为它是一行代码,即使没有找到匹配也能工作(不像this solution),而且它明确而优雅,不像this solution更简洁但看起来很深奥。

相关问题