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».
- Проверьте слово в ожидании вывода и добавьте его в текстовый файл
- Как проверить, является ли данный путь файлом или каталогом
- Установка Expect и TCL
- Ошибка tkdiff в Linux Redhat 5.5
- Как я могу вернуть конкретный код ошибки в этот момент в моем 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
.