Regex 用于与PowerShell中的序列不匹配的正则表达式
我想验证一个字符串,当点“.”的前面或后面有“-”或“ux”时,正则表达式不应匹配Regex 用于与PowerShell中的序列不匹配的正则表达式,regex,powershell,regex-lookarounds,Regex,Powershell,Regex Lookarounds,我想验证一个字符串,当点“.”的前面或后面有“-”或“ux”时,正则表达式不应匹配 我认为消极的前瞻是最好的方法,但我似乎做得不对 您可以基于使用此正则表达式,该正则表达式将拒绝匹配前面有或-或后面有或-的点 ^.*(?<![-_])\.(?![-_]).*$ ^.*? Powershell PS C:\Users\user> $reg = "^.*(?<![-_])\.(?![-_]).*$" PS C:\Users\user> $str = "aaa . aaa"
我认为消极的前瞻是最好的方法,但我似乎做得不对 您可以基于使用此正则表达式,该正则表达式将拒绝匹配前面有
或-
或后面有
或-
的点
^.*(?<![-_])\.(?![-_]).*$
^.*?
Powershell
PS C:\Users\user> $reg = "^.*(?<![-_])\.(?![-_]).*$"
PS C:\Users\user> $str = "aaa . aaa"
PS C:\Users\user>
PS C:\Users\user> $str -match $reg
True
PS C:\Users\user> $reg = "^.*(?<![-_])\.(?![-_]).*$"
PS C:\Users\user> $str = "aaa ._ aaa"
PS C:\Users\user>
PS C:\Users\user> $str -match $reg
False
PS C:\Users\user>$reg=“^.*(您可以基于使用此正则表达式,该正则表达式将拒绝匹配前面有
或-
或后面有
或-
的点
^.*(?<![-_])\.(?![-_]).*$
^.*?
Powershell
PS C:\Users\user> $reg = "^.*(?<![-_])\.(?![-_]).*$"
PS C:\Users\user> $str = "aaa . aaa"
PS C:\Users\user>
PS C:\Users\user> $str -match $reg
True
PS C:\Users\user> $reg = "^.*(?<![-_])\.(?![-_]).*$"
PS C:\Users\user> $str = "aaa ._ aaa"
PS C:\Users\user>
PS C:\Users\user> $str -match $reg
False
PS C:\Users\user>$reg=“^.*(您不一定需要环顾四周,
直接使用否定字符类也可以:
$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
您不必四处张望,
直接使用否定字符类也可以:
$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
这将强制最小字符串长度至少为3个字符,因为它与a.
不匹配,因为dot后面或前面没有.
或-
@PushpeshKumarRajwanshi,这是一个很好的观点。因此,这取决于OPs未知用例,我的RE是否适用。负面外观在这种情况下,他们不需要更多的字符出现(不像积极展望或简单的其他字符)相反,只需说,什么不应该存在,它有助于保持有效字符串长度最小。@PushpeshKumarRajwanshi我自己经常使用它们,并引用非常相同的站点链接:数据这将强制最小字符串长度至少为3个字符,因此它将不匹配a.
在应该匹配的位置,因为点不匹配后面或前面有\uu
或-
@PushpeshKumarRajwanshi,这是一个很好的观点。因此,这取决于OPs未知用例,我的RE是否适用。在这种情况下,负面注视头很好,因为它们不需要更多字符(与正面注视或其他字符不同)相反,只要说,什么不应该存在,它有助于保持有效字符串长度最小。@PushpeshKumarRajwanshi我自己经常使用它们,并引用非常相同的站点链接:D@Glenn:这是一个有点复杂的正则表达式。你有什么问题吗?@Glenn:当然,这很简单。你只需要加上这个消极的前瞻(?!.*(:-\.\124;\.-))@
之后,在当前正则表达式中添加。
或-
以拒绝字符串。如果您还需要其他内容,请告诉我。@Glenn:当然,我可以删除可避免的内容并使其尽可能紧凑。@Glenn:我通过删除一些不必要的外观标题缩短了您的正则表达式。B但它仍然可以进一步改进,因为我觉得它有太多的负面外观,可以组合并改进。如果你能给我接受匹配和拒绝匹配的规则和样本数据。我可以提出你需要的精确简洁的正则表达式。我建议用一些等价的方法删除所有敏感信息保留格式的nt字符,然后您可以通过我的skype id与我联系pkr555
@Glenn:这是一个有点复杂的正则表达式。您对此有什么问题吗?@Glenn:当然,这很简单。您只需添加此负面前瞻(?!*(:-\。\124;-)@
之后,在当前正则表达式中添加。
或-
以拒绝字符串。如果您还需要其他内容,请告诉我。@Glenn:当然,我可以删除可避免的内容并使其尽可能紧凑。@Glenn:我通过删除一些不必要的外观标题缩短了您的正则表达式。B但它仍然可以进一步改进,因为我觉得它有太多的负面外观,可以组合并改进。如果你能给我接受匹配和拒绝匹配的规则和样本数据。我可以提出你需要的精确简洁的正则表达式。我建议用一些等价的方法删除所有敏感信息保留格式的nt字符,然后您可以通过我的skype id与我联系pkr555