W3docs

strpbrk()

La funzione strpbrk() in PHP cerca in una stringa uno qualsiasi di un insieme di caratteri e restituisce la porzione della stringa dal primo carattere trovato.

Introduzione

La funzione strpbrk() in PHP cerca in una stringa uno qualsiasi di un insieme di caratteri e restituisce il resto della stringa a partire dalla prima corrispondenza. Il nome sta per "string pointer break" — scansiona la stringa da sinistra a destra e si ferma (breaks) nel momento in cui incontra un carattere presente nell'insieme di ricerca.

Questo la rende utile per operazioni come "dammi tutto a partire dal primo @, =, o ?" senza dover scrivere un'espressione regolare. Questo articolo copre la sintassi, i valori di ritorno, un'insidia comune riguardo a come viene scelta la corrispondenza e i casi d'uso pratici.

Sintassi

strpbrk(string $haystack, string $char_list): string|false
ParametroDescrizione
$haystackLa stringa in cui cercare.
$char_listUna stringa che elenca i caratteri da cercare. Ogni carattere è trattato individualmente"abc" significa "uno qualsiasi tra a, b e c", non la sottostringa "abc".

Valore di ritorno: la porzione di $haystack dal primo carattere corrispondente fino alla fine della stringa. Se nessuno dei caratteri in $char_list è presente, restituisce false.

strpbrk() è case-sensitive: cercare "A" non corrisponde a una a minuscola.

Esempio di base

php— editable, runs on the server

Output:

Found 'llo World' in 'Hello World'

Un risultato che sorprende spesso: il risultato è llo World, non World. La funzione restituisce a partire dal primo carattere corrispondente che incontra durante la scansione da sinistra a destra. Anche se W è nella lista di ricerca, la l minuscola in "Hello" compare prima nella stringa, quindi il risultato inizia da lì. L'ordine in $char_list non ha importanza — conta solo la posizione nella stringa.

La corrispondenza è posizionale, non basata sull'ordine della lista

È facile supporre che strpbrk() rispetti l'ordine dei caratteri passati. Non è così — restituisce a partire dal carattere di ricerca che compare prima nella stringa:

<?php

// 'o' and 'q' are both in the list; 'q' appears first in the haystack.
echo strpbrk("The quick brown fox", "oq"); // quick brown fox

Output:

quick brown fox

Uso pratico: suddivisione su un delimitatore

Poiché strpbrk() restituisce "tutto dal delimitatore in poi", è possibile abbinarla a substr() per ottenere il valore dopo un separatore:

<?php

$pair = "name=John";

$fromEquals = strpbrk($pair, "=");   // "=John"
$value      = substr($fromEquals, 1); // drop the leading "=" -> "John"

echo $value;

Output:

John

Funziona bene anche quando si accettano più delimitatori possibili contemporaneamente:

<?php

$line = "[email protected]";

echo strpbrk($line, "@?#"); // @example.com

Output:

@example.com

Gestione del caso "non trovato"

Quando nessun carattere della lista è presente nella stringa, strpbrk() restituisce false. Confrontare sempre con l'operatore stretto !== affinché un risultato vuoto ma valido non venga scambiato per un fallimento:

<?php

$result = strpbrk("PHP 8.4", "AEIOU"); // uppercase vowels — none present (case-sensitive)

if ($result === false) {
  echo "No matching character found.";
} else {
  echo $result;
}

Output:

No matching character found.

strpbrk() vs. funzioni correlate

FunzioneCercaRestituisce
strpbrk()uno qualsiasi di più caratteriil resto della stringa dalla prima corrispondenza, o false
strpos()una singola sottostringala posizione numerica della corrispondenza, o false
strstr()una singola sottostringail resto della stringa da quella sottostringa, o false
strrchr()l'ultima occorrenza di un carattereil resto della stringa da quel punto, o false

Utilizzare strpbrk() quando si ha un piccolo insieme di caratteri a cui reagire e si vuole la coda della stringa. Se si cerca sempre una sola sottostringa fissa, strstr() o strpos() è più chiaro. Per la corrispondenza basata su pattern, usare preg_match().

Conclusione

strpbrk() restituisce il resto di una stringa a partire dal primo carattere che corrisponde a qualsiasi carattere nell'insieme di ricerca, o false se non c'è corrispondenza. Ricordare che la corrispondenza viene scelta in base alla posizione nella stringa, non dall'ordine della lista di ricerca, e che è case-sensitive. È un'alternativa concisa a un'espressione regolare quando si ha bisogno di "tutto dal primo delimitatore in poi".

Esercizi

Pratica
Cosa fa la funzione strpbrk() in PHP?
Cosa fa la funzione strpbrk() in PHP?
Was this page helpful?