无法理解为什么正则表达式不适用于字符串的 start/end 标记

Can't understand why regex doesn't work with start/end markers of the string

这是我的测试正则表达式,带有 IgnoreCase 和 Singleline 选项:

^\s*((?<test1>[-]?\d{0,10}.\d{3})(?<test2>\d)?(?<test3>\d)?){1,}$

并输入数据:

      24426990.568   128364695.70706     -1288.460

如果我省略了^(匹配行首)和$(匹配行尾)

\s*((?<test1>[-]?\d{0,10}.\d{3})(?<test2>\d)?(?<test3>\d)?){1,}

然后一切正常。

为什么它不适用于字符串 start/end 标记 (^/$)?

提前致谢。

在单行模式下,开始和结束字面意思是输入字符串的开始和结束。 多行模式下只表示行首和行尾。

请注意,这意味着 整个 输入字符串。

所以如果你使用:

      24426990.568   128364695.70706     -1288.460

作为你的输入字符串,那么开头是第一个白色space,字符串的结尾将是0

由于您的模式与您正在寻找的内容的一个实例完全匹配,因此当与 ^ 和 $ 一起使用时,正则表达式将失败。这是因为它在输入字符串中寻找该模式的一个实例,但实际上有三个。 您有两个选择:

  1. 删除 ^ 和 $
  2. 更改模式以至少匹配一次