无法理解为什么正则表达式不适用于字符串的 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
由于您的模式与您正在寻找的内容的一个实例完全匹配,因此当与 ^ 和 $ 一起使用时,正则表达式将失败。这是因为它在输入字符串中寻找该模式的一个实例,但实际上有三个。
您有两个选择:
- 删除 ^ 和 $
- 更改模式以至少匹配一次
这是我的测试正则表达式,带有 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
由于您的模式与您正在寻找的内容的一个实例完全匹配,因此当与 ^ 和 $ 一起使用时,正则表达式将失败。这是因为它在输入字符串中寻找该模式的一个实例,但实际上有三个。 您有两个选择:
- 删除 ^ 和 $
- 更改模式以至少匹配一次