0
votes

Regexp correspond à la sortie, alors qu'il ne devrait pas

Ma sortie ressemble à ceci:

    set expected_output "| sc-2 |[regexp {(?:\d+\.){3}\d+}]| running |"


4 commentaires

Vous avez rendu votre regex assez difficile. Y a-t-il déjà un cas où ^. * SC-2. * En cours d'exécution. * $ est insuffisant?


Hmm, n'en pensa pas. Je suppose que ça va bien.


Merci c'est résolu et tout simplifié


Le problème avec votre code est que la regex que vous envoyez au processus n'est pas simplement une chaîne, elle contient le caractère spécial de regex | . Vous testez donc si $ str contient la chaîne vide ou la "SC-2" ou une séquence d'espaces ou "exécuter" ou la chaîne vide à nouveau. Et puisque chaque chaîne contient la chaîne vide, le résultat est toujours vrai.


3 Réponses :


0
votes

Comme a été suggéré par JasonmClose (je ne suis pas sûr de savoir comment baliser ici). J'ai changé le regexp vers Amore simple. et le procureur fonctionne bien comme ceci:

    proc check_if_exist_in_output_with_reg_exspression {lines String_to_Check} {
    set err_msg ""
    set Flag "False"
    foreach line $lines {  if {[regexp ^.*sc-2.*running.* $String_to_Check ]==1} {
                          set Flag "True"
                          return $Flag }}
    if {$Flag == "False"} {
    #Fail step
    return "Error"
    }
}


0 commentaires

0
votes

Ce n'est pas une réponse à la question de l'OP sur l'obtention du Regexp à droite, mais il convient de mentionner que tout le fuzz peut également être abordé sans régexp. Vous voudrez peut-être envisager qc. Dans le sens de: xxx


0 commentaires

0
votes
            set Output {+------+--------------+---------+------------+-----------------------+
            | id   | IP address   | status  | type       | created at            |
            +------+--------------+---------+------------+-----------------------+
            | sc-1 |              | running | r4.2       | Aug 21, 2017 08:09:44 |
            | sc-2 | 164.54.39.30 | running | r4.2       | Aug 21, 2017 08:09:44 |
            +------+--------------+---------+------------+-----------------------+};

            proc check_if_exist_in_output_reg {lines Str} { 
                        set Flag "False"
                        if {[regexp  -linestop $Str $lines a] ==1} { ; #-linestop for matching whithin a line, a for just storing match in a variable a
                            #puts $a
                            set Flag "True"
                            return $Flag 
                        } else {
                            return "Error"
                        }
            }

            #calling the proc:
            #set lines [split $Output "\n"] : not needed
            set expected_output {sc-1.*running} ; #brackets for literal substitution
            set Result [check_if_exist_in_output_reg $Output $expected_output] 
            puts $Result

0 commentaires