J'essaye d'écrire une regex qui va analyser les informations provenant des alertes générées par Hyperic HQ. Les alertes sont disponibles dans les courriels avec une ligne de sujet comme:Problème avec le look derrière l'assertion et la sous-chaîne optionnelle
"[HQ] !!! - Alert: My Demo Website Alert Resource: demo.myserver.net Apache Web Server State: fixed"
Pour couper une longue histoire courte, je dois être en mesure de saisir systématiquement la partie « Apache Web Server », quel que soit le nom d'hôte qui ne peut même être présent. Je sais que le nom d'hôte finira toujours par "myserver.net".
Le regex J'est:
/Resource:\s.*(?<=mydomain.net)?\s(.*)\s(?=State)/
Je me attendais que cela correspondrait à zéro ou plusieurs caractères entre "Resource:"
et "State:"
, suivant le cas échéant (à l'exclusion) un nom d'hôte.
Malheureusement, ce que cela renvoie est "Server"
, c'est-à-dire le dernier mot du bit que je veux faire correspondre. Cela se produit indépendamment du fait que le nom d'hôte figure dans la chaîne.
Quelqu'un peut-il aider?
EDIT: Solution telle que fournie par le Tchad ci-dessous
/Resource:\s(?:.*.myserver.net)?(.*)\sState/
Télécharger Expresso, mettez toutes vos chaînes possibles dans les données de test, et d'exécuter cela et voir si elle correspond correctement – CaffGeek
+1. Vous n'avez probablement pas besoin d'utiliser un lookahead pour "State" non plus. –
@Alan, n'a même pas remarqué que, vous avez raison, il n'a pas besoin d'être là – CaffGeek