LINUX.ORG.RU

совпадение ip

 ,


1

1
#!/usr/bin/env tclsh

set str {172.19.3.191,172.19.3.192,172.19.3.19,172.19.3.193}
set ip 172.19.3.19
set RE "$ip\[\D\]"
puts [regexp -expanded $RE $str null]

Пытаюсь понять, есть ли ip адрес в строке. Но что-то идет не так. В онлайн чекерах регексп вроде верный, а тут не работает - выдает 0. Куда копать?

Ответ на: комментарий от TeopeTuK

Ага. переписал так

set RE "$ip\\D"
Вроде работает. Но не понял, а как быть с []?

Если так

set RE "$ip\[\\D\]"
то
172.19.3.19[\D]
couldn't compile regular expression pattern: invalid escape \ sequence
    while executing
"regexp -expanded $RE $str null"
    invoked from within
"puts [regexp -expanded $RE $str null]"

macumazan ★★
() автор топика
Ответ на: комментарий от macumazan

Внутри квдратных скобок в Tcl \D ставить нельзя. И \S тоже. Ну вот так оно устроено. Но тебе бы ту вообще отказаться от регулярных выражений. Вот так будет гораздо удобнее:

set str {172.19.3.191 172.19.3.192 172.19.3.19 172.19.3.193}
set ip 172.19.3.19
puts [expr {[lsearch -exact $str $ip] >= 0}]
TeopeTuK ★★★★★
()

Тут, наверное, проще всего воспользоваться простым сравнением строк: puts [string match "*$ip*" $str].

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.