我想验证字符串,当点“。”时正则表达式不匹配。在其之前或之后直接带有“-”或“ _”。
我认为否定先行是最好的方法,但我似乎无法正确地做到这一点。
答案 0 :(得分:5)
答案 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