“[\S\s]*?”这个正则表达式是什么意思?

"[\S\s]*?" What Does This Regex Mean?

提问人:PradanaBackUp 提问时间:12/15/2022 最后编辑:Konrad RudolphPradanaBackUp 更新时间:12/25/2022 访问量:56

问:

据我所知,

  • [\S\s]== 匹配任何字符,
  • *== 匹配任何字符
  • ?== 可选。

这是什么意思?

System.Text.RegularExpressions.Regex.Match(getMsg,"(?<=Status         :\s+)[\S\s]*?(?=  ╙█)").Value

使用正则表达式的输入为:

"Status : ******** "
UiPath RPA vb.net 正则表达式

评论

0赞 Jaood_xD 12/23/2022
简而言之,“?”不是可选参数,而是“惰性量词”的一部分

答:

0赞 Nick Boswell 12/25/2022 #1

您在第一次评估中是正确的 - [\S\s] 将匹配任何字符 - 包括空格和换行符。第二个评估在技术上是不正确的 - 星号通配符符号表示它将匹配零个或多个前一个标记,因此与第一部分结合使用,yes 将表示“匹配任何字符”。

?在正则表达式中并不意味着“可选”。这意味着:(来源:https://regexr.com/)。这基本上会否定星号量词,并且大多会导致意外结果 - 请谨慎使用“*”和“?”。Makes the preceding quantifier lazy, causing it to match as few characters as possible. By default, quantifiers are greedy, and will match as many characters as possible.

除了前面使用的 \s+ 令牌外,这个正则表达式中还有很多事情要做。查看 https://regexr.com/,并在使用正则表达式时将其用作始终的工具。此站点不仅解释了正则表达式的各个方面,还允许您测试当前表达式以查看测试表达式是否匹配。