【发布时间】:2017-09-28 20:57:12
【问题描述】:
我已经杀死了几个小时,但仍然无法正确使用正则表达式 - 我将非常感谢您在这方面的帮助。
我需要匹配参数之间的所有单词,其中要选择的单词至少是两个单词,两个参数之间至少用一个空格分隔(参数是任何以破折号开头的单词:-ParamName),例如以下字符串:
Start-WinJob -ParamOne paramValue -ParamTwoval1 val2 val3-ParamThreeval1 val2 val3 valN
我需要一个正则表达式来匹配:
val1 val2 val3
和
val1 val2 val3 valN
更新:
我正在使用 PowerShell,这个 sn-p 将在控制台上打印匹配项:
$pattern = "(?<= )\w+ [\w ]+" # referring to answeres below -> reset match using `\K` is not recognised in PowerShell implementation and errors
$text = "Start-WinJob -ParamOne paramValue -ParamTwo val1 val2 val3 -ParamThree val1 val2 val3 valN"
$text | Select-String $pattern -AllMatches |
% {$_.Matches} |
% {$_.Value}
你们太棒了,我发现很难选择答案...
我想抛出一些额外的复杂性,希望你喜欢它 - 匹配值是语音句子。我很抱歉我的遗漏,但我需要照顾标点符号。基本上这些字符中的任何一个:€£$.%¬|@:?/,'#<>``&![]=-_)(*+ 可能存在于值中,并且不应破坏值\单词的匹配,此外重复的双引号 "" 也应被忽略
更新的测试字符串:
Start-WinJob -ParamOne paramValue -ParamTwoval1 val2 val3-ParamThreeescape values: €£$.%¬|@?/,'#<>\``&![]=-_)(*+ lastVal
【问题讨论】:
-
您打算在哪种语言或程序中使用此正则表达式模式?例如,Javascript 不支持lookbehind,因此可能会限制模式的功能。
-
抱歉,我认为从标题中可以看出该语言 - 应该可以在 PowerShell 中使用。
标签: regex powershell