Newsgroup: it.comp.www.php
Titolo: rimuovere estemità da una stringa

$ cat main-test.php
<?php
$name = 'pref_ABC_suff';
$name = preg_replace('#^pref_#', '', $name);
$name = preg_replace('#_suff$#', '', $name);
echo $name;
 
$ php main-test.php
ABC
 
 
 
OK, ma è possibile usare una sola preg_replace (invece di due) che 
rimuove sia prefisso che suffisso?

rimuove sia prefisso che suffisso?
 
Certo. Si può togliere tutt'e due
 
	'#(^pref_|_suff$)#' 	=> ''
 
oppure lasciare la parte centrale
 
	'#^pref_(.*)_suff$#'	=> '\\1'
 
Trovare l'appropriato escaping e fare collaudo è lasciato per esercizio ;-D
 
Leonardo
-- 
 
"You all presumably know why" :-) :-(

 	'#(^pref_|_suff$)#' 	=> ''
 
Le parentesi a cosa servono?

Il giorno Sat, 8 Sep 2018 10:48:36 +0200
alex <1j94...@lnx159sneakemail.com.invalid> ha scritto:

io proverei così
 
http://php.net/manual/en/function.explode.php
 
 
Enrico 
 


Sicuro che sia la funzione adatta?

Le parentesi a cosa servono?
 
Non lo so... neanch'io ho mai perso troppo tempo a leggere i manuali.


 Non lo so... neanch'io ho mai perso troppo tempo a leggere i manuali.
 
"ho mai perso troppo tempo a leggere i manuali"
 
????

 
 
Non c'è bisogno d'usare una espressione regolare:
 
$name = substr($name, strlen("pref_"), -strlen("suff_"));
 
 
Ciao!

$name = substr($name, strlen("pref_"), -strlen("suff_"));
 
La semplicità del genio :-D
 
In effetti, dati i requisiti usare preg_replace era una complicazione
inutile.


 Sicuro che sia la funzione adatta?
 
Sicuro mai, ma se hai la stringa separata sa un carattere specifico
come "_", mi pare parecchio semplice, l'esplodo e prendo quello che mi
pare. 
 
 	list($name1,$name2,$name3) = explode("_",$name']);
 
utilizzerei sicuramente anche quella che ti ha mostrato 
fma...@gmail.com
 
 
se non consci quante porzioni ci sono divise da "_" 
 
altrimenti non vedo contro indicazioni 
 
Enrico 
 

 altrimenti non vedo contro indicazioni
 
Splittare e togliere le estremità non sono proprio la stessa cosa, direi...

 direi...
 
 
Hai ragione :)
 
Enrico 
 


Preferisco preg_replace() e si ci pensate bene ci sono dei validi motivi 
per preferirlo alla soluzione con substr e strlen
 
io avrei estratto name nel seguente modo,
$name = preg_replace("|.+_(.+)_.+|i", "\\1", $name);
 
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
 
 

 
 
Guarda, questa non te la passerei nemmeno se, senza provarla, mi dici
cosa manda in output su "pref_pref_pippo_suff" e "pref_pippo_suff_suff" ;)
 
Io, "se ci penso bene", quando le specifiche non sono complete implemento
il minimo richiesto.
 
 
Ciao!

 $name = preg_replace("|.+_(.+)_.+|i", "\\1", $name);
 
 
Premesso che nemmeno io vedo particolari vantaggi di preg_replace, ma almeno lo userei bene :p
 
$name = preg_replace("|[^_]+_(.+)_[^_]+|i", "\\1", $name); 
 
Benvenuto in it.comp.www.php!


Su questo ti do perfettamente ragione e se $name sarà sempre una stringa 
del tipo:
$name = 'pref_ABC_suff';
allora tanto di cappello per la tua soluzione:
$name = substr($name, strlen("pref_"), -strlen("suff_"));
 
Se però non sei tu a decidere su pref_ e _suff che magari hanno dei 
valori casuali come ti comporteresti in questo caso?
 
Ciao


 
 
e se? :)
 
Potrebbero essere costanti o variabili, a seconda del caso, i delimitatori,
il prefisso, il suffisso, prefisso e suffisso con delimitatori, la lunghezza
di questi, la lunghezza di quello che devi estrarre, e combinazioni di
questi. Non puoi fare parsing senza conoscere il formato ;)
Ovviamente per ogni caso c'è una soluzione, che magari si applica anche ad
altri, ma sempre ovviamente una generale non può esistere.
 
 
Ciao!

 
 
Grazie!
Ho frequentato questo newsgroup se non erro dal 2001 al 2010, poi molti 
isp hanno chiuso i server delle news.
 
Noto però con molto piacere diversi nomi di persone che sono ancora qui.
 
Un cordiale saluto.


 
 
Puoi sempre mettere le stringhe "pref" e "suff" in variabili o costanti
(così come i delimitatori), e concatenare la regexp (o quel che sia) a
runtime.
 
 
Ciao!

 Un cordiale saluto.
 
Allora ben tornato.