Extraction de chaine de caractère [Résolu]

Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
- - Dernière réponse : cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
- 7 déc. 2017 à 20:04
Bonsoir le forum,

Je dispose d'un fichier .cfg
define service{
	host_name				IGFRPA1BACKUP1
	service_description		C:
	_SERVICE_ID			192357
	;_CRITICALITY_NAME			
	_CRITICALITY_LEVEL			
	_CRITICALITY_ID			
	use				TPL_OS_WINDOWS_DISK_NSCLIENT
	contact_groups			ADNT
	_CRITICAL				95
	_WARNING				85
	_DISK				C
	_EQUIPE				ADNT
	notes				MOP0034
}



Via une RegEx, je souhaite récupérer toutes les variables _ (ex _DISK) et les formater d'une certaine façon.

Pour l'instant avec
		if (strpos($value, '	_') !== false && $hostname == $onehost) {
		
			$value = preg_replace("/^\s*_\s*/", "[", $value);

			$value = str_replace("\n","",$value); // suppression nouvelle ligne (\n)
			$value = str_replace("\r","",$value); // suppression retour-chariot (\r)
			
			 
			$keywords = preg_replace("/^\s*_\s*/", "[", $value);
			
			// ici je positionne un pipe pour check visuel début et fin de string
			echo ("<pre>"); print_r("|$keywords|"); echo ("</pre>");
			
			//$keywords = preg_split("/[\s,]+/", $keywords);
			$servicevar[] = $keywords;
		}

j'obtiens

|[SERVICE_ID			192357|

|[CRITICALITY_LEVEL			|

|[CRITICALITY_ID			|

|[CRITICAL				95|

|[WARNING				85|

|[DISK				C|

|[EQUIPE				ADNT|

Array
(
    [IGFRPA1BACKUP1] => Array
        (
            [0] => Array
                (
                    [service] => C:
                    [use] => TPL_OS_WINDOWS_DISK_NSCLIENT
                    [macros] => Array
                        (
                            [variables] => Array
                                (
                                    [0] => [SERVICE_ID			192357
                                    [1] => [CRITICALITY_LEVEL			
                                    [2] => [CRITICALITY_ID			
                                    [3] => [CRITICAL				95
                                    [4] => [WARNING				85
                                    [5] => [DISK				C
                                    [6] => [EQUIPE				ADNT
                                )

                        )

                )

        )

)


Je souhaiterai obtenir
                                    
[0] => Array
                (
                    [service] => C:
                    [use] => TPL_OS_WINDOWS_DISK_NSCLIENT
                    [macros] => Array
                        (
                            [variables] => Array
                                (
                                    [SERVICE_ID] => 192357
                                    [CRITICALITY_LEVEL] => ‘’
                                    [CRITICALITY_ID] => ‘’
                                    [CRITICAL] => 95
                                    [WARNING] => 85
                                    [DISK] => C
                                    [EQUIPE] => ADNT
                                )

                        )

                )


Je bute sur le remplacement de
|[SERVICE_ID			192357|
par
[SERVICE_ID] => 192357
ainsi que sur le remplacement de
CRITICALITY_LEVEL
par
[CRITICALITY_ID] => ‘’


Merci pour vos conseils,
jean-marc
Afficher la suite 

2 réponses

Messages postés
13530
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 juillet 2019
290
0
Merci
Salut,

est ce que ceci serait un début de réponse?
http://regexstorm.net/tester?p=%28%3f%3c%3d%5ct%29%5c%3b%3f_%28%3f%3cvariable%3e%5bA-Z_%5d%2b%29%5ct%2b%28%3f%3cvaleur%3e%5cw*%29&i=define+service%7b%0d%0a%09host_name%09%09%09%09IGFRPA1BACKUP1%0d%0a%09service_description%09%09C%3a%0d%0a%09_SERVICE_ID%09%09%09192357%0d%0a%09%3b_CRITICALITY_NAME%09%09%09%0d%0a%09_CRITICALITY_LEVEL%09%09%09%0d%0a%09_CRITICALITY_ID%09%09%09%0d%0a%09use%09%09%09%09TPL_OS_WINDOWS_DISK_NSCLIENT%0d%0a%09contact_groups%09%09%09ADNT%0d%0a%09_CRITICAL%09%09%09%0995%0d%0a%09_WARNING%09%09%09%0985%0d%0a%09_DISK%09%09%09%09C%0d%0a%09_EQUIPE%09%09%09%09ADNT%0d%0a%09notes%09%09%09%09MOP0034%0d%0a%7d&r=%5b%24%7bvariable%7d%5d+%3d%3e+%24%7bvaleur%7d


Clique sur l'onglet "Context"
cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
23 -
Bonsoir Whismeril,
Tu es meilleur que moi pour les recherches !!!
En effet, je suis allé, il y a 1h, sur "http://regexstorm.net/tester" pour tester
$tmp = preg_replace("/^\s*_\s*/", "", $line);
.
Le plus "dur" est d'écrire le pattern, je vais tester.
Merci et bonne soirée.

jean-marc
Whismeril
Messages postés
13530
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 juillet 2019
290 -
http://www.commitstrip.com/fr/2014/02/24/coder-on-the-verge-of-extinction/

Mais je ne te donnerais pas l'adresse de la colline ;)
cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
23 > Whismeril
Messages postés
13530
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 juillet 2019
-
merci pour cette plaisenterie
Commenter la réponse de Whismeril
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
23
0
Merci
Bonsoir le Forum,

Retour tardif, problème résolu avec
$pattern = '/(?<=\t)\;?_(?<variable>[A-Z0-9_]+)\t+(?<valeur>[A-Za-z0-9- \/.!,#\t]+)/';

if  (strpos($value, '	_') !== false && $service_name_current === $service_use) {
	preg_match($pattern, $value, $array_var);	
	$array_var[1] = "\$_SERVICE$array_var[1]\$";
	if ($array_var[2] === "\t"){ // test si value vide donc tabulation
		$array_var[2] = "‘’"; 
	}	
	$service_var[$array_var[1]] = $array_var[2];
}
Commenter la réponse de cs_JMO