IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

explode, strstr, str.. utilise des expressions régulières ? [RegEx]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut explode, strstr, str.. utilise des expressions régulières ?
    bonjour, est ce que les fonctions comme explode, strstr, strpos ce style de fonctions utilisent des expressions régulières pour faire le travail ?
    Merci d'avance

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Non, comme indiqué dans leur documentation respective.

    Seules les fonction ereg* (dépréciées), preg_* (extension PCRE) et mb_ereg* (extension mbstring), gèrent les expressions régulières.

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 739
    Points
    11 739
    Par défaut
    Citation Envoyé par julp Voir le message
    Non, comme indiqué dans leur documentation respective.

    Seules les fonction ereg* (dépréciées), preg_* (extension PCRE) et mb_ereg* (extension mbstring), gèrent les expressions régulières.
    ... ainsi que split(), ce en quoi il diffère d'explode().

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est ce que la question porte sur l'utilisation ou le fonctionnement interne des fonctions ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    sur la façon que ces fonctions sont programmé. Mais alors il font comment pour faire le explode ? => pour i =0; i<count(); i++ ) si i == separateur alors position = ... ect ???

    Sinon ma question c'était vraiment de savoir si les explode strstr ect ... etait programmé avec des expressions régulières. En tt cas merci pour les début de réponses, apparemment non !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    jmet le post en résolu mais si vous avez kkchose a rajouter hésité pas jrelis svt mes messages

  7. #7
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Ci-dessous la fonction C du explode PHP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    PHP_FUNCTION(explode)
    {
    	zval **str, **delim;
    	long limit = LONG_MAX; /* No limit */
     
    	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZ|l", &delim, &str, &limit) == FAILURE) {
    		return;
    	}
     
    	convert_to_string_ex(str);
    	convert_to_string_ex(delim);
     
    	if (! Z_STRLEN_PP(delim)) {
    		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter");
    		RETURN_FALSE;
    	}
     
    	array_init(return_value);
     
    	if (! Z_STRLEN_PP(str)) {
    	  	if (limit >= 0) {
    			add_next_index_stringl(return_value, "", sizeof("") - 1, 1);
    		} 
    		return;
    	}
     
    	if (limit > 1) {
    		php_explode(*delim, *str, return_value, limit);
    	} else if (limit < 0) {
    		php_explode_negative_limit(*delim, *str, return_value, limit);
    	} else {
    		add_index_stringl(return_value, 0, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
    	}
    }
    C'est pas très parlant, il faut juste comprendre qu'il faut aller voir la fonction php_explode que tu peux voir ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    PHPAPI void php_explode(zval *delim, zval *str, zval *return_value, long limit) 
    {
    	char *p1, *p2, *endp;
     
    	endp = Z_STRVAL_P(str) + Z_STRLEN_P(str);
     
    	p1 = Z_STRVAL_P(str);
    	p2 = php_memnstr(Z_STRVAL_P(str), Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp);
     
    	if (p2 == NULL) {
    		add_next_index_stringl(return_value, p1, Z_STRLEN_P(str), 1);
    	} else {
    		do {
    			add_next_index_stringl(return_value, p1, p2 - p1, 1);
    			p1 = p2 + Z_STRLEN_P(delim);
    		} while ((p2 = php_memnstr(p1, Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp)) != NULL &&
    				 --limit > 1);
     
    		if (p1 <= endp)
    			add_next_index_stringl(return_value, p1, endp-p1, 1);
    	}
    }
    Ils n'utilisent donc pas les expressions régulières...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    cool merci beaucoup, sympa le bout de code meme si j'ai peu compris !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/10/2010, 21h00
  2. Réponses: 2
    Dernier message: 26/11/2008, 09h28
  3. Réponses: 2
    Dernier message: 08/05/2008, 20h41
  4. Réponses: 6
    Dernier message: 30/05/2007, 17h31
  5. Réponses: 5
    Dernier message: 20/09/2006, 13h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo