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
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
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.
Est ce que la question porte sur l'utilisation ou le fonctionnement interne des fonctions ?
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 !
jmet le post en résolu mais si vous avez kkchose a rajouter hésité pas jrelis svt mes messages
Ci-dessous la fonction C du explode PHP
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
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); } }
Ils n'utilisent donc pas les expressions régulières...
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); } }
cool merci beaucoup, sympa le bout de code meme si j'ai peu compris !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager