我正在尝试使用正则表达式在Powershell中编写where子句,该正则表达式仅匹配不以[AND不以]结尾的行(数组中的项)(ini头)。
$test = @('test', '[test]', '[te]st', 'te[st]')
以下是我所能得到的。它仅匹配“测试”。
$test | where-object {$_ -match '^(?!\[).+(?<!\])$'}
“test”,“[te] st”和“te [st]”应匹配。谢谢。
最佳答案
问题
在[te]st
中,初始负前瞻失败。
在te[st]
中,最终的负向后查找失败。
解决方案
我们需要使用交流发电机|
来确保一种或另一种情况都有效。.如果两种环视均失败,则不会获得匹配:
^ (?# match the beginning of the string)
(?: (?# start non-capturing group)
(?!\[) (?# negative lookahead for [)
.+ (?# match 1+ characters)
| (?# OR)
.+ (?# match 1+ characters)
(?<!\]) (?# negative lookbehind for ])
) (?# end non-capturing group)
$ (?# match the end of the string)
Demo
注意:我将轮换放入了一个非捕获组,这样我就不需要在每个可能的语句周围包括 anchor
^
和$
。关于.net - 正则表达式以匹配不以[开头但不以]结尾的行(ini头文件),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23902255/