你想要
- 允许可能以 \)、))、))) 结尾的字符串
- 拒绝以 "、\、<、>、空格或 ) 结尾的字符串
- 所有其他字符串都可以
最后一个关闭参数需要包含在拒绝字符中,以便如果字符串以 ) 结尾,则可以正确找到它
我在powershell中尝试了这个,它按预期工作。
clear
foreach ($String in @("", "abc", "abc\)", "abc>", "abc<", "abc\", "abc""", "abc)", "abc))", "abc)))", "abc ", "abc`t")) {
if ( $String -match '((?<!(["\\<>)]|\s))$)|((?<=\\|\){1,})\)$)' ) {
Write-Host "'$String' is good"
} else {
Write-Host "'$String' is bad"
} # end if
} # next string
我正在使用两个由“或”管道分隔的正则表达式lookbehinds
((?<!(["\\<>)]|\s))$)
验证被拒绝的字符不在字符串的末尾
((?<=\\|\){1,})\)$)
如果最后一个字符是 a ) 那么它前面应该有一个 \ 或者一个或多个)
这个小例程产生以下输出:
'' is good
'abc' is good
'abc\)' is good
'abc>' is bad
'abc<' is bad
'abc\' is bad
'abc"' is bad
'abc)' is bad
'abc))' is good
'abc)))' is good
'abc ' is bad
'abc ' is bad