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

Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
- - Dernière réponse : cs_JMO
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
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 

Votre réponse

2 réponses

Messages postés
12415
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 décembre 2018
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
Dernière intervention
24 juin 2018
-
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
12415
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 décembre 2018
-
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
Dernière intervention
24 juin 2018
> Whismeril
Messages postés
12415
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 décembre 2018
-
merci pour cette plaisenterie
Commenter la réponse de Whismeril
Messages postés
1855
Date d'inscription
jeudi 23 mai 2002
Dernière intervention
24 juin 2018
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.