我想知道你是否可以帮助我制定一个正则表达式来匹配以下模式?
任意长度的数字字符串,可能在也可能不在0x之前。
答案 0 :(得分:7)
这样的事情:
\b(?:0x)?\d+\b
或者,如果您要从匹配项中排除可选的"0x"
:
(?:(?<=\b0x)|\b)\d+\b
前者是:
- a word boundary - "0x", optional - decimal digits, at least one - a word boundary
后者将是:
- choose - either a position preceded by - a word boundary - "0x" - or a word boundary - decimal digits, at least one - a word boundary
后者匹配:
- 123456 - 0x123456
但不是:
- 0y123456
要匹配十六进制数字(如“0x”所示),请使用[0-9A-Fa-f]
代替"\d"
。
答案 1 :(得分:2)
你能指出更多的问题吗?你想怎么用这场比赛?哪种语言/正则表达式实现。
一个可以使用许多语言regexp实现的简单方法是。
(?:0x)?\d+
答案 2 :(得分:2)
如果你想要整个字符串匹配(除了数字之外别无其他):
^(0x)?[0-9]+$
我在这里使用类[0-9]
尽可能便携。您可能更愿意在任何地方使用\d
。
它的工作原理如下:
^
(0x)?
[0-9]+
$
如果前面的“0x”表示十六进制数,则更难,而省略表示十进制数:
\b((0x[0-9a-zA-Z]+)|([1-9][0-9]*))\b
这也可以防止以0
...
答案 3 :(得分:1)
正式正则表达式:
(0x)?[0-9]+
答案 4 :(得分:1)
我总是喜欢提供非常基线的RE,因此它们可以在每个RE引擎上工作,所以:
(0x)?[0-9][0-9]*
有了合适的边界条件(在旧的RE引擎上,那将是[ \t]
),这应该适用于任何地方。
但是,如果0x
是正确的,看起来你想要的是十六进制字符,那么也许你想要:
(0x)?[0-9A-Fa-f][0-9A-Fa-f]*
或者它与许多其他针对更高级引擎的优秀建议相同。
答案 5 :(得分:0)
您提到的0x
表示您想要捕获十六进制数字。在那种情况下,我建议:
(?:0x)?[[:xdigit:]]+
其中[:xdigit:]
是Posix表示法中所有十六进制数的列表。
答案 6 :(得分:0)
这完全取决于您对数字的含义,以及允许数字的上下文。我假设前面带有0x的数字是十六进制数,因此也可以包含A-F和a-f。
鉴于此测试字符串:"a 012 0xa 4_56 num:8 42!"
此正则表达式与"012"
,"0xa"
,"4"
,"56"
,"8"
和"42"
匹配:
(0x[\dA-Fa-f]+|\d+)
此正则表达式与"012"
,"0xa"
,"8"
和"42"
匹配:
\b(0x[\dA-Fa-f]+|\d+)\b
此正则表达式与"0xa"
,"8"
和"42"
匹配:
\b(0x[\dA-Fa-f]+|[1-9]\d*)\b
此正则表达式与"012"
和"0xa"
匹配:
(?<=\s)(0x[\dA-Fa-f]+|\d+)(?=\s)
此常规展示匹配"0xa"
:
(?<=\s)(0x[\dA-Fa-f]+|[1-9]\d*)(?=\s)
答案 7 :(得分:-2)
\ B((0X [[:xdigit:]] +)|((0 |([1-9] [0-9] +)))\ B'/ P>
答案 8 :(得分:-3)
['0x']?[0-9]+
这是更多文字,以满足最少30个字符。