str_replace match only prima istanza
-
28-09-2019 - |
Domanda
Una domanda followup a Get tutto il testo tra i tag con preg_match_all () o meglio la funzione?
In considerazione i seguenti dati POST:
2010-June-3
<remove>2010-June-3</remove>
2010-June-15
2010-June-16
2010-June-17
2010-June-3
2010-June-1
Sono voler rimuovere solo la prima istanza del 2010-Giugno-3, ma il codice seguente rimuove tutti i dati.
$i = 1;
$pattern = "/<remove>(.*?)<\/remove>/";
preg_match_all($pattern, $_POST['exclude'], $matches, PREG_SET_ORDER);
if (!empty($matches)) {
foreach ($matches as $match) {
// replace first instance of excluded data
$_POST['exclude'] = str_replace($match[1], "", $_POST['exclude'], $i);
}
}
echo "<br /><br />".$_POST['exclude'];
Questa Echos:
<remove></remove>
2010-June-15
2010-June-16
2010-June-17
2010-June-1
Dovrebbe eco:
<remove>2010-June-3</remove>
2010-June-15
2010-June-16
2010-June-17
2010-June-3
2010-June-1
Soluzione
È necessario utilizzare preg_replace () invece:
$_POST['exclude'] = preg_replace( '/' . preg_quote( $match[1], '/' ) . '/', "", $_POST['exclude'], 1, $i );
La variabile dopo il $ _POST [ 'escludere'] è una variabile limit
, come potete vedere nel link qui sopra.
Il funzione preg_quote () funzione non era necessario nel campo della data, ma perché è una variabile, può essere necessaria per includere i caratteri speciali per le espressioni regolari.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow