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
  • TCL скрипт try catch
  • Установка Expect и TCL
  • grep IP-адреса в сценарии ожиданий
  • Как я могу вернуть конкретный код ошибки в этот момент в моем TCL-скрипте?
  • Создайте каталог, если он не существует в TCL
  • Составить имя файла внутри сценария ожидания
  • Команда Unix не работает в скрипте Tcl
  • 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
    Linux и Unix - лучшая ОС в мире.