If your engine doesn't support lookbehind/lookahead, then you can still just match the whole thing including the non-digits and pick the capture you're interested in.
(?:^|[^1-9])(0?[1-9]|[1-2][0-9]|3[0-6])(?:$|[^1-9])
Your result would be in capture 1 in this example (the "outer" matches are in non-capturing groups).
Note that with .NET, you do have full support for lookbehind and lookahead, so that the following should work:
(?<![0-9])(?:0?[1-9]|[1-2][0-9]|3[0-6])(?![0-9])
This uses negative lookaround instead of positive lookaround. Otherwise, numbers that are at the beginning or end of the string will not match because a non-numeric character is required where there is no character, leading to a non-match.