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».

  • Как я могу вернуть конкретный код ошибки в этот момент в моем TCL-скрипте?
  • Как проверить, является ли данный путь файлом или каталогом
  • Как установить iwidgets без доступа root и установить окружение
  • Команда Unix не работает в скрипте Tcl
  • Ошибка tkdiff в Linux Redhat 5.5
  • rlwrap: многоязычное автозаполнение tclsh
  • configure не удалось из-за того, что для получения более подробной информации см. `config.log '
  • Составить имя файла внутри сценария ожидания
  • 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 .

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