负整数正则表达式不匹配

时间:2011-03-27 18:52:56

标签: regex

我用谷歌搜索过,发现了以下结果:

有了一些(非常基本的)正则表达式的知识,我认为这样可行:

r\.(^-?\d+)\.(^-?\d+)\.mcr

用于解析此类字符串:

  • r.0.0.mcr
  • R.-1.5.mcr
  • r.20.-1.mcr
  • R.-1.-1.mcr

但是我没有对这些进行匹配。 由于我正在学习(或试图学习)正则表达式,你能否解释为什么我的模式不匹配(而不仅仅是为我编写一个新的工作模式)?根据我的理解,它是这样的:

  • 匹配r
  • 匹配一段时间
  • 匹配前缀否定符号,并存储组
  • 匹配一段时间
  • 匹配前缀否定符号,并存储组
  • 匹配preiod
  • 匹配mcr

但我错了,显然:)。

3 个答案:

答案 0 :(得分:4)

你非常接近。 ^匹配字符串的开头,因此它应该只位于模式的开头(如果你想完全使用它 - 这取决于你是否也接受例如abcr.0.0.mcr )。类似地,可以使用$(但仅在模式的末尾)指示您将仅接受在模式匹配之后不包含任何内容的字符串(因此例如r.0.0.mcrabc将不会被接受)。否则,我觉得它看起来不错。

答案 1 :(得分:1)

^个字符告诉它只匹配一行的开头;因为在任何一种情况下它显然都不在一行的开头,所以它无法匹配。在这种情况下,您只需要删除^。 (我认为你要说的是“不要让其他任何东西介于这些之间”,但这是默认值,除了在正则表达式的开头;你需要类似.*之类的东西才能允许他们之间的其他字符。)

答案 2 :(得分:0)

由于^不在表达式的开头,因此其含义为“not”。所以在这种情况下,这意味着那里不应该有冲刺。