我需要提取字符串中的最后一个数字。我正在尝试使用正则表达式和否定前瞻来做到这一点,但它不起作用。这是我的正则表达式:
\d+(?!\d+)
这些是一些字符串,只是为了给您一个想法,以及正则表达式应该匹配什么:
ARRAY[123] matches 123
ARRAY[123].ITEM[4] matches 4
B:1000 matches 1000
B:1000.10 matches 10
等等。正则表达式匹配数字,但匹配所有数字。我不明白为什么消极前瞻不起作用。有谁愿意解释一下吗?
.*(?:\D|^)(\d+)
获取最后一个数字;这是因为匹配器会吞噬所有带有
.*
的字符,然后回溯到第一个非数字字符或字符串的开头,然后匹配最后一组数字。
您的负向先行不起作用,因为在字符串“1 3”上,例如,
1
与
\d+
匹配,然后空格与负向先行匹配(因为它不是一个或多个数字的序列) )。 3
甚至从未被人看过。请注意,您的示例正则表达式中没有任何组,因此我不确定您是如何提取数字的。
/(\d+)\D*\z/
末尾的
\z
前面的
\D*
(\d+)
Inline Modifiers (?imsxXU)
)。
这符合我的目的 -.*(?:\D|^)\d*(\D)