Символ $ регулярного выражения

Я знаю, когда использую $ , это означает, что символы до $ должны отображаться в конце строки.

Но я не знаю разницы между приведенными ниже тестами, когда переменная a является целым числом:

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

Они такие же?

-2
26.02.2016, 09:01
2 ответа

Нет, выражения [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
3
28.01.2020, 05:14

Нет; оба выражения разные.

[[a = ~ -? [0-9] +]] проверит, содержит ли a целое число в любом месте. Это может быть где угодно в строке; это не имеет значения.

но

С другой стороны, [[a = ~ ^ -? [0-9] + $]] проверяет, состоит ли a исключительно из целых чисел (с необязательным - as первый символ), потому что ^ - это начало проверяемой строки, а $ отмечает конец строки.

Это означает, что во втором выражении любые нечисловые числа в строке не будут совпадать.

3
28.01.2020, 05:14

Теги

Похожие вопросы