\\s/]+/+-6ren">
gpt4 book ai didi

c++ - 如何正确结束正则表达式 url 匹配

转载 作者:太空宇宙 更新时间:2023-11-04 14:11:03 25 4
gpt4 key购买 nike

我一直在研究 url 解析器,但我在获得正确的结尾时遇到了一些问题

sregex rex = sregex::compile("((?:ftp|http|https)://)([^<>\\s/]+/+[^\\s\"<>]+([^)\\s\\\"<>$]*[\\)$]*))", sregex::icase );

我不想允许单个 )如果前面没有正斜杠 ( \ ),则在字符串的末尾。它也不能以 " 结尾, \ < , >或空格。我为此所做的努力是:

 ([^)\\s\\\"<>$]*[\\)$]*) 

如何正确书写?

最佳答案

你想

  • 允许以\), )), ))) 结尾的字符串
  • 拒绝以 "、\、<、>、空格或 ) 结尾的字符串
  • 所有其他字符串都可以

最后一个关闭的 paran 需要包含在拒绝字符中,以便如果字符串以 ) 结尾,它可以被正确找到

我在 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,})\)$)

如果最后一个字符是 ) 那么它前面应该有一个\或一个或多个 )

这个小例程产生以下输出:

'' 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

关于c++ - 如何正确结束正则表达式 url 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14339128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com