'^[0-9]+$' 的含义?

3 bash

这个表达式模式'^[0-9]+$'检查什么?

#!/usr/bin/env bash
if [[ $VAR =~ '^[0-9]+$' ]]; then
    execute code
fi
Run Code Online (Sandbox Code Playgroud)

iga*_*gal 6

正则表达式^[0-9]+$将匹配非空的连续数字字符串,即仅由数字组成的非空行。如果你想[[ ... =~ there ]]bash3.2 或更高版本中使用那个正则表达式,那么你也应该不加引号,即^[0-9]+$代替'^[0-9]+$'. 您的代码片段可能应该如下所示:

#!/usr/bin/env bash
if [[ "${VAR}" =~ ^[0-9]+$ ]]; then
    #execute code
fi
Run Code Online (Sandbox Code Playgroud)


fle*_*erb 5

当 VAR 从开始 (^) 到结束 ($) 匹配一个或多个 (+) 数字 [0-9] 时,正则表达式将匹配 VAR 的内容。该行必须仅包含数字以匹配 [0-9]+ 两端的 ^ 和 $。

用于测试 if 正则表达式与一系列输入的比较的程序

$ cat flub
#!/usr/bin/bash


for VAR in 3a3 '^[0-9]+$' 2 1919181818 flub 282_2828 '38938 2828' '3939.' '.3939'
do
    echo -n "Testing $VAR : "
    if [[ "$VAR" =~ ^[0-9]+$ ]]; then
    echo "$VAR" matches
    else
        echo
    fi
done
Run Code Online (Sandbox Code Playgroud)

输出

$ ./flub
Testing 3a3 : 
Testing ^[0-9]+$ : 
Testing 2 : 2 matches
Testing 1919181818 : 1919181818 matches
Testing flub : 
Testing 282_2828 : 
Testing 38938 2828 : 
Testing 3939. : 
Testing .3939 : 
Run Code Online (Sandbox Code Playgroud)

而用单引号引用的扩展正则表达式部分只匹配文字字符串:

$ cat flub
#!/usr/bin/bash


for VAR in 3a3 '^[0-9]+$' 2 1919181818 flub 282_2828 '38938 2828' '3939.' '.3939'
do
    echo -n "Testing $VAR : "
    if [[ "$VAR" =~ '^[0-9]+$' ]]; then
    echo "$VAR" matches
    else
        echo
    fi
done



$ ./flub
Testing 3a3 : 
Testing ^[0-9]+$ : ^[0-9]+$ matches
Testing 2 : 
Testing 1919181818 : 
Testing flub : 
Testing 282_2828 : 
Testing 38938 2828 : 
Testing 3939. : 
Testing .3939 : 
Run Code Online (Sandbox Code Playgroud)

  • 我认为你的描述是不正确的。正则表达式`^[0-9]+$` 只会匹配*完全*由数字组成的行。它不会匹配仅以数字开头和结尾的行,例如它不会匹配字符串`1bc`。*"以 (^) 开头并以 ($) 一个或多个 (+) 数字 [0-9]"* 结尾的正则表达式将是 `^[0-9]+.*[0-9]+$ `. (4认同)