正则表达式的 $ 字符

正则表达式的 $ 字符

我知道当我使用 时$,这意味着之前的字符$必须显示在字符串的末尾。

a但是,当变量为整数时,我不知道下面给出的测试之间的区别:

  1. [[ a =~ -?[0-9]+ ]]
  2. [[ a =~ ^-?[0-9]+$ ]]

它们相同吗?

答案1

不,表达方式[0-9]+[0-9]+$不一样。第一个将匹配一个或多个数字在任何位置在字符串中,后者将仅有的匹配一系列一个或多个数字结尾字符串的。为了进行演示,我将使用此脚本根据其第一个参数测试您的表达式:

#!/bin/bash
a=$1

if [[ $a =~ -?[0-9]+ ]]; then
   echo "match to first expression"
else
   echo "no match to first expression"
fi

if [[ $a =~ ^-?[0-9]+$ ]]; then
   echo "match to second expression"
else
   echo "no match to second expression"
fi

结果如下:

$ ./test.sh 12345
match to first expression
match to second expression
$ ./test.sh 12345AA
match to first expression
no match to second expression

答案2

不;两种表达方式不同。

[[ a =~ -?[0-9]+ ]]将测试 a 在任何位置是否包含整数。它可以位于字符串中的任何位置;没关系。

另一方面,[[ a =~ ^-?[0-9]+$ ]]将测试 a 是否仅由整数组成(带有可选的 - 作为第一个字符),因为 ^ 表示测试字符串的开头,而 $ 标记字符串的结尾。

这意味着在第二个表达式中,字符串中任何位置的任何非数字都不会匹配。

相关内容