регулярного выражения я работаю на данный момент выглядит следующим образом:Regex «начало строки» якорь не работают
^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$
Я пытаюсь соответствовать всем числам с плавающей точкой, но только число. Например, следующее должно соответствовать:
- 6,0
- 1.22E3
- -2
- 2.99999e-12
Однако следующий не должны совпадать:
- somestring /////// 6.0
Я проверил указанное выше регулярное выражение на this validation site, и он работает так, как ожидалось. Однако при запуске в моем сценарии bash ничего не происходит.
Это мой Баш код:
if [[ "$VAL" =~ ^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$ ]]
then
echo $VAL, "is a number"
else
echo $VAL, "is not a number"
fi
Я попытался удалить якоря, и он соответствует любым строкам, которые содержат плавающую точку. Однако строки, такие как «//////6.00007», совпадают. $ Anchor работает, как ожидалось; однако,^не.
Пожалуйста, дайте мне знать, если у вас есть предложения по устранению этой проблемы.
Спасибо!
Редактировать 1
Удален плохие примеры
Edit 2
Я побежал регулярное выражение в своем собственном foo.sh
как предложено @lurker и код побежал, как ожидается, с моими тестовыми случаями , Поэтому я посмотрел, что сравнивалось с регулярным выражением. Когда я оценивал, что сравнивалось, все выглядело отлично, поэтому он не обращал внимания на то, почему регулярное выражение не совпало.
Тогда я начал подозревать, что echo
не показывало, что было на самом деле в $VAL
по какой-то причине.
Итак, я использовал это: NEWVAL=(echo $VAL)
как временное обходное решение, пока не смогу выяснить, что происходит.
Я пробовал ваше регулярное выражение и скрипт как есть, и они, похоже, работают отлично для меня. '" //////6.00007 "вышел" не число ". – lurker
Странно. Каковы возможности? Зачем вы запускаете скрипт, а не меня? – kgrimes2
Как вы запускали свой скрипт? Покажите, что именно вы сделали. Я помещаю ваш код в файл 'foo.sh', затем' export VAL = "6" 'и запускал' bash foo.sh', и он сказал: '6, является числом'. Затем я выполнил 'export VAL =" /////// 6.000007 "и запустил' bash foo.sh', и он сказал: '///////6.000007, не является числом'. Вы можете сделать 'bash --version' и сообщить, какую версию' bash' вы используете. – lurker