Tcl regexp: Как проверить, содержит ли переменная число?

Ниже приведен скрипт tcl для проверки наличия в переменной 0-9 числа.

set a "abc" if {[ regexp {[0-9]*} $a ]} { puts "Found number in $a" } else { puts "Doesn't find number in $a" } 

Но когда я запускаю его, он сообщает «Найденный номер в abc».

  • configure не удалось из-за того, что для получения более подробной информации см. `config.log '
  • rlwrap: многоязычное автозаполнение tclsh
  • Создайте каталог, если он не существует в TCL
  • Ошибка tkdiff в Linux Redhat 5.5
  • Почему вывод не записывается в журнал из сценария ожидания
  • TCL скрипт try catch
  • заменить в начале строки
  • Запуск gui из события acpi
  • 3 Solutions collect form web for “Tcl regexp: Как проверить, содержит ли переменная число?”

    Это потому, что вы используете регулярное выражение, которое означает «соответствие 0 или больше номеров». Строка abc соответствует 0 номерам, поэтому вы получаете положительный результат. Просто удалите * («0 или больше») и он будет работать как ожидалось:

     set a "a2bc" if {[ regexp {[0-9]} $a ]} { puts "Found number in $a" } else { puts "Doesn't find number in $a" } 

    В регулярном выражении * означает «ноль или более ранее заданного символа или класса». Таким образом, вы ищете любую строку с нулевыми или более числовыми символами. Что соответствует всему.

    Вы можете использовать шаблоны в стиле глобуса, чтобы решить эту проблему, не требуя возможности регулярных выражений:

     if {[string match {*[0-9]*} $a]} { ... 

    См. Документацию string match .

    Interesting Posts

    Что позволяет BSD запускать исполняемые файлы Linux, но не наоборот?

    Настроить привязку для использования определенного сервера в качестве отправной точки для рекурсивного запроса?

    может ли / boot быть на другом диске, чем grub или lilo?

    «Bad flag в команде substitute:« {»при замене строки sed из одного файла в другой файл

    не может изменить пользователя

    Значение fsync () в настройке sshfs + LUKS

    Составить имя файла внутри сценария ожидания

    Остановка постфикса – сообщения помещаются в очередь, когда постфикс простаивает?

    Список содержимого каталога перенаправляется в файл с помощью tee

    shell или perl-скрипт для проверки группы имеют права чтения

    Принять любой секретный ключ для аутентификации

    Где расположены сценарии postinstall для RPM?

    Повторяя команду вывода текстового вывода, в прокручиваемом ncurses-подобном интерфейсе?

    Зашифруйте мой диск, но разрешите вводить пароль с SSH

    Постфикс использует отчет почтовой команды, если письмо не было отправлено на адрес?

    Linux и Unix - лучшая ОС в мире.