RegEx用于在PowerShell中不匹配序列

时间:2019-05-15 20:15:48

标签: regex powershell regex-lookarounds

我想验证字符串,当点“。”时正则表达式不匹配。在其之前或之后直接带有“-”或“ _”。

我认为否定先行是最好的方法,但我似乎无法正确地做到这一点。

2 个答案:

答案 0 :(得分:5)

您可以基于 lookarounds 使用此正则表达式,该正则表达式将拒绝匹配以_-开头或以{{1 }}或_

-

Regex Demo

Powershell,

^.*(?<![-_])\.(?![-_]).*$

答案 1 :(得分:1)

您不一定需要环顾四周,
直接使用否定的字符类也可以:

$RE = [regex]'.*[^_-]\.[^_-].*'

@"
foo.bar
foo_.bar
foo._bar
foo-.bar
foo.-bar
"@ -split '\r?\n' | ForEach-Object {
    if ($_ -match $RE){
        "{0} matches `$RE" -f $_
    } else {
        "{0} doesn't match `$RE" -f $_
    }
}

示例输出:

foo.bar matches $RE
foo_.bar doesn't match $RE
foo._bar doesn't match $RE
foo-.bar doesn't match $RE
foo.-bar doesn't match $RE