Regex perl正则表达式获取尾随数字
我试着从最后出现的一个或多个数字中分离出特定数量的文本。当有一个尾随数字时,以下选项有效,但当有两个或更多尾随数字时,以下选项无效?(\d+)不应该在“P\u TIME12”中得到“12”吗 导致Regex perl正则表达式获取尾随数字,regex,perl,Regex,Perl,我试着从最后出现的一个或多个数字中分离出特定数量的文本。当有一个尾随数字时,以下选项有效,但当有两个或更多尾随数字时,以下选项无效?(\d+)不应该在“P\u TIME12”中得到“12”吗 导致 word ABC digits 1 word DFRES digits 3 word TIME1 digits 2 TIA\w包含数字,如果只有数字在末尾,请使用[\u a-zA-Z] 而且\w+是贪婪的,它将首先匹配整个单词,并且不会为\d+留下任何内容,因此它必须回溯1个字符,最后一个字符对\d
word ABC digits 1
word DFRES digits 3
word TIME1 digits 2
TIA
\w
包含数字,如果只有数字在末尾,请使用[\u a-zA-Z]
而且\w+
是贪婪的,它将首先匹配整个单词,并且不会为\d+
留下任何内容,因此它必须回溯1个字符,最后一个字符对\d+
来说足够了
如果您需要惰性运算符,因为中间有数字,请使用<代码> ^ p'(\W+)($D+)/<代码> < /P> < P> <代码> \W\/COD>包含数字,而使用<代码> [Z-A Z-Z] < /COD>,如果只有数字在结尾
而且\w+
是贪婪的,它将首先匹配整个单词,并且不会为\d+
留下任何内容,因此它必须回溯1个字符,最后一个字符对\d+
来说足够了
如果你需要懒惰操作符,因为你中间有数字,使用<代码> ^ p'(\W+)(\d+)$< /代码>
w匹配“Word字符”,包括数字和下划线。因为您要求至少一个数字(\d+),\w是贪婪的,并且匹配一个数字 您应该比\w
更明确,并使用/^p([A-Za-z]+)(\d+)$/
。\w匹配“单词字符”,包括数字和下划线。因为您要求至少一个数字(\d+),\w是贪婪的,并且匹配一个数字
/^P_(\D+)(\d+)$/
您应该比\w
更明确,而应该使用/^p([A-Za-z_]+)(\d+)$/
/^P_(\D+)(\d+)$/
字符类\d
与数字匹配;它的否定\D
匹配其他所有内容
字符类
\d
与数字匹配;它的否定\D
匹配其他所有内容。如果您可以在第一部分中捕获空格,一个更简单的解决方案是在尾随数字之前不加密地匹配任何内容,然后贪婪地匹配尾随数字
这样做的好处是,您可以匹配第一部分中的偶数数字(前提是它们不会出现在末尾)。
还有空间,如前所述
即:
my@strs=qw(P_1ABC1 P_DFRES3 P_3TIME12);
foreach(@strs){
如果(/^P(.*)(\d+)$/){
打印“>$1$2如果您可以在第一部分中捕获空格,一个更简单的解决方案是在尾随数字之前不加密地匹配任何内容,然后贪婪地匹配尾随数字
这样做的好处是,您可以匹配第一部分中的偶数数字(前提是它们不会出现在末尾)。
还有空间,如前所述
即:
my@strs=qw(P_1ABC1 P_DFRES3 P_3TIME12);
foreach(@strs){
如果(/^P(.*)(\d+)$/){
打印“>$1$2银行,正是我需要的!谢谢,正是我需要的!使用\pL
匹配字母,而不是\w
。使用\pL
匹配字母,而不是\w
。
>1ABC< >1<
>DFRES< >3<
>3TIME< >12<