[Expression] ! pour les connaisseurs!

deux simples

essaye avec çà ?

Tu as essayé du coup ?

ouais ça tourne depuis ce matin sans souci

Pas d’effets de bords du coup ?? :astonished:

RAS dans les logs…

Le chauffage fonctionne, les volets aussi, les alertes/messages sont envoyés, la présence est OK…

Reste çà alors : testExpr("round(#mois#*(-1.15*#mois#+15)+5)");

wow :flushed:

Je deviens fou ou bien ?

expr: round(#mois#*(-1.15*#mois#+15)+5)

Dans le setTags elle n’est pas éxécuté dans le round() de la class car elle remplit ce test:

if ( substr_count($match[2], '(') != substr_count($match[2], ')') ) {

et en effet $match[2] vaut : #mois#*(-1.15*#mois#+15

Il bouffe la dernière parenthèse, du coup on a pas le meme nombre de ( que ) !

serait-ce le preg_match_all("/([a-zA-Z][a-zA-Z_]*?)\((.*?)\)/", $_expression, $matches, PREG_SET_ORDER); qui déconne ??

suit pas expert en regex, voile le matches :

matches: [
[
« round(12*(-1.1512+15)",
« round »,
"12
(-1.15*12+15 »
]
]

rapidos entre 2 trucs du boulot

Meilleur =>[a-zA-Z_]++(((?:[()]|[^()]|(?1))*))
image

Deux choses :

L’option autoquote en config sert à mettre une valeur de retour de tag (#time#, #smois# etc) ou de commande entre double quote SI il y a un espace dedans. çà doit pas servir souvent …

Rien à voir mais:

En 4.0 stock et sur ma 4.1 trafiquée:

variable('rhasspyWakeWord') -> nok
variable("rhasspyWakeWord") - ok
variable(rhasspyWakeWord) - ok

bizarre non ??

Ton option, c’est pour avoir ceci tag("lavaleurdemontag") ?

Moi, je mets des simples quotes à l’extérieur du tag pour qu’il fasse les calculs lorsque le nombre est sous la forme scientifique :upside_down_face:

Ah 2 AND et 2 OR qui trainaient

Normalement ils fonctionnent en php et ils sont dans la liste des operateurs de symfony:
image

Symfony fait quoi avec l’array ? Un replace insensible ?

Une idée du coup pour ce regex ? Tu a testé avec autre chose. C l’imbrication de parenthèses qu’il aime pas on dirait ? Le core le gère après mais si des le début le regex enlève une des parenthèses ça fait foirer le truc. Le round(x(y)) n’est même pas évalué.

Euh non, là il trouve que round

Refait un test avec [a-zA-Z_]+(\((?:[()]|[^()]|(?1))*\))
J’ai raté un bout de copié/collé

avec çà j’ai bien les parenthese mais pas le round :crazy_face:
(\([^()]*+(?:(?R)[^()]*)*+\))

preg_match_all("/([a-zA-Z][a-zA-Z_]*?)(\((?:[()]|[^()]|(?1))*\))/", $_expression, $matches, PREG_SET_ORDER);

round(#mois#(-1.15#mois#+15)+5) → 19 !!!

Question suivante, en faisant çà on casse quoi :rofl: :thinking:

EDIT: çà, KO strlen(‹ to,to ›)