我一直在处理网址解析器,但我在结束时遇到了一些问题
sregex rex = sregex::compile("((?:ftp|http|https)://)([^<>\\s/]+/+[^\\s\"<>]+([^)\\s\\\"<>$]*[\\)$]*))", sregex::icase );
如果字符串末尾没有前向斜杠()
),我希望不允许在字符串末尾添加一个\
。它也不能以"
,\
<
,>
或空格结尾。我努力做到的是:
([^)\\s\\\"<>$]*[\\)$]*)
如何正确编写?
答案 0 :(得分:0)
你想要
最后一个关闭的paran需要包含在deny字符中,这样如果字符串结束,则可以正确找到它
我在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
我正在使用两个由“或”管道
分隔的正则表达式((?<!(["\\<>)]|\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