仅在特定范围内匹配数字

时间:2014-05-13 11:20:22

标签: regex

我想只从网页上匹配一个3位数字。

例如,如果网页的编号为1 599-+15之间的空格以及之后的-+符号)。我想要在0599-+之间捕获/匹配数字,而不是其他任何内容。

我的正则表达式是:regex(?:^|(?:[^\d\s]\s*))([0-5]\d\d-+)但这个也匹配"i 1599-+"

regex(\^[0-5]?[0-9]?[0-9]-+$)也不起作用......

3 个答案:

答案 0 :(得分:3)

解决方案是将此正则表达式与非捕获组一起使用,该非捕获组匹配字符串的开头或不是数字的东西(由于空间处理而具有更多的冗长):

(?:^|(?:[^\d\s]\s*))([0-5]\d\d)

示例(在javascript中,因为您没有指定语言):

"1 599".match(/(?:^|(?:[^\d\s]\s*))([0-5]\d\d)/) => null
"a sentence with 1 599 inside".match(/(?:^|(?:[^\d\s]\s*))([0-5]\d\d)/) => null
"another with 599".match(/(?:^|(?:[^\d\s]\s*))([0-5]\d\d)/) => ["h 599", "599"]
"599 at the start".match(/(?:^|(?:[^\d\s]\s*))([0-5]\d\d)/) => ["599", "599"]

(期望的组在索引1处)

答案 1 :(得分:1)

我希望你需要这个。试试吧,如果它没有实现的话。写一点描述。

/^[0-5]?[0-9]?[0-9]$/.test("599");

答案 2 :(得分:0)

从上面我理解并开发了这个,我认为这就是你需要的。

/^[0-5]?[0-9]?[0-9][\+|-]?$/.test("599");

在上面的正则表达式中,我将+ - 作为可选项,并且它会检查是否存在任何一个符号。 如果你想要的顺序 - +然后试试这个 /^[0-5]?[0-9]?[0-9][\-][\+]$/.test("99-+");。 好的@ user3214294