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

  • Арифметические операции в регулярном выражении
  • rsync исключить на основе размера файла?
  • Как искать одиночные кавычки и двойные кавычки в поиске grep?
  • Как выполнить многострочный grep для нескольких файлов?
  • sed match word1 и word2, чтобы получить слово между ними
  • Поиск имени файла в файле
  • проверьте, содержит ли строка символы
  • Почему заглавные буквы включены в ряд строчных букв в регулярном выражении awk?
  • Замена нескольких пустых строк одной пустой строкой в ​​vim / sed
  • Обратное совпадение в sed, замените противоположное тому, что было найдено
  • Извлечение времени из журналов с использованием tcl ожидается
  • Почему мое регулярное выражение не работает с помощью sed в сценарии bash на Mac OSX?
  • 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 - лучшая ОС в мире.