Regex-匹配数字范围,周围没有数字

Regex-匹配数字范围,周围没有数字,regex,lookahead,lookbehind,digit,Regex,Lookahead,Lookbehind,Digit,所以我有这样的想法: \b(0?[1-9]|[1-2][0-9]| 3[0-6])\b 这只适用于匹配的数字1-36。但我可能会得到像S36这样的东西,它不会匹配。我不能假定数字两边都有一个干净的单词边界 我想要它,这样它就可以将1-36与任何东西匹配,除了两边的其他数字 我原以为这样做行得通,但事实并非如此: (?如果您的引擎不支持lookback/lookahead,那么您仍然可以匹配整个内容,包括非数字,并选择您感兴趣的捕获 (?:^|[^1-9])(0?[1-9]|[1-2][0-9]|

所以我有这样的想法:

\b(0?[1-9]|[1-2][0-9]| 3[0-6])\b

这只适用于匹配的数字1-36。但我可能会得到像S36这样的东西,它不会匹配。我不能假定数字两边都有一个干净的单词边界

我想要它,这样它就可以将1-36与任何东西匹配,除了两边的其他数字

我原以为这样做行得通,但事实并非如此:


(?如果您的引擎不支持lookback/lookahead,那么您仍然可以匹配整个内容,包括非数字,并选择您感兴趣的捕获

(?:^|[^1-9])(0?[1-9]|[1-2][0-9]|3[0-6])(?:$|[^1-9])
在本例中,您的结果将出现在捕获1中(“外部”匹配在非捕获组中)

请注意,对于.NET,您确实完全支持lookback和lookahead,因此以下功能应该可以正常工作:

(?<![0-9])(?:0?[1-9]|[1-2][0-9]|3[0-6])(?![0-9])
(?

这将使用负环视而不是正环视。否则,字符串开头或结尾的数字将不匹配,因为如果没有字符,则需要非数字字符,从而导致不匹配。

您可以使用[^0-9]在开头和结尾,然后通过查看相应的捕获组(在本例中为第二个)获取编号:


什么regex引擎?不是所有的风格都支持Lookback甚至lookahead。我在.NET中这样做,但用免费软件Expresso进行测试。我只是做了一个小编辑,将大括号添加回其中,否则它不会在所有情况下都起作用。很抱歉。感谢您的回复。由于两边的数字都不匹配,这这正是我想要的,但它也匹配非数字。因此,如果我输入字符串S36,它匹配S36,而不仅仅是36…@dustmouse。”然后通过查看相应的捕获组(本例中为第二个组)来获取数字。“.Javascript示例:
'S36”。替换(/(^[0-9])(0?[1-9]|[1-2][0-9]|[3-0-6])($[0-9])/,“$2”)
第二个捕获的组是
$2
,因此结果是
36
(^|[^0-9])(0?[1-9]|[1-2][0-9]|3[0-6])($|[^0-9])