Funzioni IsMatch, Match e MatchAll

Si applica a: App canvas App basate su modello Interfaccia della riga di comando di Power Platform

Verifica la presenza di una corrispondenza o estrae parti di una stringa di testo in base a un modello.

Descrizione

La funzione IsMatch verifica se una stringa di testo corrisponde a un modello che può contenere caratteri ordinari, modelli predefiniti o un'espressione regolare. Le funzioni Match e MatchAll restituiscono le corrispondenze, incluse quelle secondarie.

Utilizzare IsMatch per convalidare ciò che un utente ha digitato in un controllo Text input. Ad esempio, è possibile verificare se l'utente ha immesso un indirizzo di posta elettronica valido prima che il risultato venga salvato nell'origine dati. Se l'immissione non corrisponde ai criteri, aggiungere altri controlli che richiedono all'utente di correggerla.

Usare Incontro per estrarre la prima stringa di testo che corrisponde a un modello e MatchAll per estrarre tutte le stringhe di testo corrispondenti. È anche possibile estrarre le corrispondenze secondarie per analizzare stringhe complesse.

Match restituisce un record di informazioni per la prima corrispondenza trovata e MatchAll restituisce una tabella di record per ogni corrispondenza trovata. Il record o i record contengono:

Column Type Descrizione
corrispondenza o corrispondenze secondarie con nome Testo Ogni corrispondenza secondaria con nome avrà una propria colonna. Creare una corrispondenza secondaria usando (?<nome>...) nell'espressione regolare. Se una corrispondenza secondaria con nome ha lo stesso nome di una delle colonne predefinite (seguenti), la corrispondenza secondaria ha la precedenza e viene generato un avviso. Per evitare questo avviso, rinominare la corrispondenza secondaria.
FullMatch Testo Tutta la stringa di testo corrispondente.
StartMatch Numero La posizione iniziale della corrispondenza nella stringa di testo di input. Il primo carattere della stringa restituisce 1.
SubMatches Tabella a colonna singola di testo (colonna Valore) La tabella delle corrispondenze secondarie con nome e senza nome nell'ordine in cui appaiono nell'espressione regolare. In genere, le corrispondenze secondarie con nome sono più facili da utilizzare e sono consigliate. Utilizzare la funzione ForAll o Last( FirstN( ...) ) per utilizzare una singola corrispondenza secondaria. Se nessuna corrispondenza secondaria è definita nell'espressione regolare, questa tabella sarà presente ma vuota.

Queste funzioni supportano matchOptions. Per impostazione predefinita:

  • Queste funzioni eseguono una corrispondenza con distinzione tra maiuscole e minuscole. Utilizzare MatchOptions.IgnoreCase per eseguire corrispondenze senza distinzione tra maiuscole e minuscole.
  • IsMatch corrisponde all'intera stringa di testo ( CompleteMatchOption), mentre Match e MatchAll cercano una corrispondenza ovunque nella stringa di testo (ContainsMatchOption). Utilizzare Complete, Contains, BeginsWith o EndsWith come appropriato per il proprio scenario.

IsMatch restituisce true se la stringa di testo corrisponde al modello o false in caso contrario. Match restituisce blank se non viene trovata alcuna corrispondenza che può essere testata con la funzione IsBlank. MatchAll restituisce una tabella vuota se non viene trovata alcuna corrispondenza che può essere testata con la funzione IsEmpty.

Se si utilizza MatchAll per dividere una stringa di testo, considerare l'utilizzo della funzione Split, che è più semplice da usare e più veloce.

Modelli

La chiave per l'uso di queste funzioni è descrivere il criterio di corrispondenza. Si descrive il modello in una stringa di testo come una combinazione di:

  • Caratteri normali, ad esempio "abc" o "123".
  • Modelli predefiniti, ad esempio Letter, MultipleDigits o Email. L'enumerazione Match definisce questi modelli.
  • Codici di espressioni regolari, ad esempio "\d+\s+\d+" o "[a-z]+".

Combina questi elementi usando l'operatore di concatenazione delle stringhe &. Ad esempio, "abc" & Digit & "\s+" è un modello valido che corrisponde ai caratteri "a", "b" e "c", seguiti da una cifra da 0 a 9, seguita da almeno uno spazio vuoto.

Caratteri ordinari

Il modello più semplice è una sequenza di caratteri normali che devono corrispondere esattamente.

Ad esempio, se utilizzata con la funzione IsMatch, la stringa "Hello" corrisponde esattamente al modello Hello. Non più e non meno. La stringa "hello!" non corrisponde al modello a causa del punto esclamativo alla fine e della "h" minuscola. Vedere MatchOptions per informazioni su come modificare questo comportamento.

Nel linguaggio del modello, alcuni caratteri sono riservati per scopi speciali. Per usare questi caratteri, aggiungere un prefisso al carattere con una \ (barra rovesciata) per indicare che il carattere deve essere considerato letteralmente oppure usare uno dei modelli predefiniti come descritto in seguito in questo argomento. Questa tabella elenca i caratteri speciali:

Carattere speciale Descrizione
. punto
? punto interrogativo
* asterisco
+ più
( ) parentesi
[ ] parentesi quadre
{ } parentesi graffe
^ caret
$ simbolo di dollaro
| barra verticale o pipe
\ barra rovesciata

Ad esempio, puoi abbinare "Hello?" utilizzando il modello "Hello\?" con una barra rovesciata prima del punto interrogativo.

Modelli predefiniti

I modelli predefiniti offrono un modo semplice per trovare la corrispondenza tra un set di caratteri o una sequenza di più caratteri. Usa l'operatore di concatenazione delle stringhe & per combinare stringhe di testo con i membri dell'enumerazione Match:

Enumerazione Match Descrizione Espressione regolare
Any Corrisponde a qualsiasi carattere. .
Comma Corrisponde a una virgola. ,
Digit Corrisponde a una cifra singola (da "0" a "9"). \d
Indirizzo di posta elettronica Corrisponde a un indirizzo di posta elettronica che contiene un simbolo ("@") e un nome di dominio che contiene un punto (".") .+\@.+\\.[^\\.]{2,}
Hyphen Corrisponde a un trattino. \-
LeftParen Corrisponde a una parentesi "(" aperta. \(
Letter Corrisponde a una lettera. \p{L}
MultipleDigits Corrisponde a una o più cifre. \d+
MultipleLetters Corrisponde a una o più lettere. \p{L}+
MultipleNonSpaces Corrisponde a uno o più caratteri che non aggiungono uno spazio vuoto (non spazio, tabulazione, nuova riga). \S+
MultipleSpaces Corrisponde a uno o più caratteri che aggiungono uno spazio vuoto (spazio, tabulazione o nuova riga). \s+
NonSpace Corrisponde a un singolo carattere che non aggiunge uno spazio vuoto. \S
OptionalDigits Corrisponde a zero, a una o a più cifre. \d*
OptionalLetters Corrisponde a zero, a una o a più lettere. \p{L}*
OptionalNonSpaces Corrisponde a zero, a uno o a più caratteri che non aggiungono uno spazio vuoto. \S*
OptionalSpaces Corrisponde a zero, a uno o a più caratteri che aggiungono uno spazio vuoto. \s*
Period Corrisponde a un punto ("."). \.
RightParen Corrisponde a una parentesi ")" chiusa. \)
Space Corrisponde a un carattere che aggiunge uno spazio vuoto. \s
Tab Corrisponde a un carattere della scheda. \t

Ad esempio, il modello "A" & MultipleDigits corrisponderà alla lettera "A" seguita da una o più cifre.

Espressioni regolari

Il modello utilizzato da queste funzioni è un'espressione regolare. I caratteri ordinari e i modelli predefiniti illustrati precedentemente in questo articolo consentono di creare espressioni regolari.

Le espressioni regolari sono molto efficaci, sono disponibili in molti linguaggi di programmazione e sono usate per molti scopi. Spesso possono anche apparire come una sequenza casuale di segni di punteggiatura. Questo articolo non illustra tutti gli aspetti delle espressioni regolari. Sul Web è possibile trovare un'ampia gamma di informazioni, esercitazioni e strumenti.

Le espressioni regolari sono disponibili in dialetti diversi e Power Apps usa una variante del dialetto JavaScript. Vedere Sintassi delle espressioni regolari per un'introduzione alla sintassi. Sono supportate le corrispondenze secondarie con nome (a volte denominate gruppi di acquisizione con nome):

  • Corrispondenze secondarie con nome: (?<nome> ...)
  • Backreferenze con nome: \k<nome>

Nella tabella di enumerazioni Match vista precedentemente in questo argomento, ogni enumerazione appare nella stessa riga della relativa espressione regolare corrispondente.

Opzioni di corrispondenza

Puoi modificare il comportamento di queste funzioni specificando una o più opzioni, che puoi combinare usando l'operatore di concatenazione di stringhe (&).

Enumerazione MatchOptions Descrzione Impatto su un'espressione regolare
MatchOptions.BeginsWith Il modello deve corrispondere dall'inizio del testo. Aggiunge un simbolo ^ all'inizio dell'espressione regolare.
MatchOptions.Complete Valore predefinito di IsMatch. Il modello deve corrispondere all'intera stringa di testo, dall'inizio alla fine. Aggiunge un simbolo ^ all'inizio e un simbolo $ alla fine di un'espressione regolare.
MatchOptions.Contains Valore predefinito di Match e MatchAll. Il modello deve essere incluso in una posizione qualsiasi nel testo e non necessariamente all'inizio o alla fine. Non modifica l'espressione regolare.
MatchOptions.EndsWith Il modello deve corrispondere alla fine della stringa di testo. Aggiunge un simbolo $ alla fine dell'espressione regolare.
MatchOptions.IgnoreCase Gestisce le lettere maiuscole e minuscole come identiche. Per impostazione predefinita, la corrispondenza fa distinzione tra lettere maiuscole e minuscole. Non modifica l'espressione regolare. Questa opzione è l'equivalente del modificatore "i" standard per le espressioni regolari.
MatchOptions.Multiline Trova la corrispondenza su più righe. Non modifica l'espressione regolare. Questa opzione è l'equivalente del modificatore "m" standard per le espressioni regolari.

L'uso di MatchAll equivale a utilizzare il modificatore "g" standard per le espressioni regolari.

Sintassi

IsMatch( Text, Pattern [, Options ] )

  • Text: obbligatorio. La stringa di testo da verificare.
  • Pattern: obbligatorio. Il modello da verificare come stringa di testo. Concatenare modelli predefiniti che l'enumerazione Match definisce o specificare un'espressione regolare. Pattern deve essere una formula costante senza variabili, origini dati o altri riferimenti dinamici che cambiano durante l'esecuzione dell'app.
  • Options: facoltativo. Una combinazione di stringhe di testo dei valori dell'enumerazione MatchOptions. Per impostazione predefinita, viene usato MatchOptions.Complete.

Match( Text, Pattern [, Options ] )

  • Text: obbligatorio. La stringa di testo per la quale trovare una corrispondenza.
  • Pattern: obbligatorio. Il modello per cui trovare una corrispondenza come stringa di testo. Concatenare modelli predefiniti che l'enumerazione Match definisce o specificare un'espressione regolare. Pattern deve essere una formula costante senza variabili, origini dati o altri riferimenti dinamici che cambiano durante l'esecuzione dell'app.
  • Options: facoltativo. Una combinazione di stringhe di testo dei valori dell'enumerazione MatchOptions. Per impostazione predefinita, viene usato MatchOptions.Contains.

MatchAll( Text, Pattern [, Options ] )

  • Text: obbligatorio. La stringa di testo per la quale trovare una corrispondenza.
  • Pattern: obbligatorio. Il modello per cui trovare una corrispondenza come stringa di testo. Concatenare modelli predefiniti che l'enumerazione Match definisce o specificare un'espressione regolare. Pattern deve essere una formula costante senza variabili, origini dati o altri riferimenti dinamici che cambiano durante l'esecuzione dell'app.
  • Options: facoltativo. Una combinazione di stringhe di testo dei valori dell'enumerazione MatchOptions. Per impostazione predefinita, viene usato MatchOptions.Contains.

Esempi di IsMatch

Caratteri ordinari

Si supponga che l'applicazione contenga un controllo Text input denominato TextInput1. L'utente immette i valori in questo controllo da archiviare in un database.

L'utente digita Hello world in TextInput1.

Formula Descrizione Risultato
IsMatch( TextInput1.Text, "Hello world" ) Verifica se l'input dell'utente corrisponde esattamente alla stringa "Hello world". true
IsMatch( TextInput1.Text, "Good bye" ) Verifica se l'input dell'utente corrisponde esattamente alla stringa "Good bye". false
IsMatch( TextInput1.Text, "hello", Contains ) Verifica se l'input dell'utente contiene la parola "hello" (distinzione tra lettere maiuscole e minuscole). false
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Verifica se l'input dell'utente contiene la parola "hello" (senza distinzione tra lettere maiuscole e minuscole). true

Modelli predefiniti

Formula Descrizione Risultato
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Corrisponde a un codice fiscale degli Stati Uniti true
IsMatch( "joan@contoso.com", Email ) Corrisponde a un indirizzo di posta elettronica true
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Corrisponde a una sequenza di cifre, un punto, quindi zero o più cifre. true
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Corrisponde a una sequenza di cifre, un punto, quindi zero o più cifre. Dato che il punto non è incluso nel testo, il modello non corrisponde. false

Espressioni regolari

Formula Descrizione Risultato
IsMatch( "986", "\d+" ) Corrisponde a un numero intero maggiore di zero. true
IsMatch( "1.02", "\d+(\.\d\d)?" ) Corrisponde a un importo di valuta positivo. Se l'input contiene un separatore decimale, deve anche contenere due caratteri numerici dopo il separatore decimale. Ad esempio, 3,00 è valido, ma non 3,1. true
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Corrisponde a un importo di valuta positivo o negativo. Se l'input contiene un separatore decimale, deve anche contenere due caratteri numerici dopo il separatore decimale. true
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Corrisponde a un codice fiscale degli Stati Uniti. Convalida il formato, il tipo e la lunghezza del campo di input specificato. La stringa per la quale si intende trovare una corrispondenza deve avere tre caratteri numerici seguiti da un trattino, due caratteri numerici seguiti da un trattino e quindi quattro caratteri numerici. true
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Come nell'esempio precedente, ma uno dei trattini non è nella posizione corretta nell'input. false
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Convalida una password complessa, che deve contenere otto, nove o 10 caratteri, almeno una cifra e almeno un carattere alfabetico. La stringa non deve contenere caratteri speciali. false

Esempi di Match e MatchAll

Formula Descrizione Risultato
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Estrae solo la parte e-mail delle informazioni di contatto. {
email: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Estrae solo la parte e-mail delle informazioni di contatto. Non è stato trovato alcun indirizzo legale (non è presente alcun segno @), quindi la funzione restituisce blank. blank
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Estrae la lingua, lo script e l'area geografica del tag di lingua che la funzione Language restituisce. Questi risultati riflettono gli Stati Uniti; vedere la documentazione relativa alla funzione Language per ulteriori esempi. L'operatore (?: raggruppa i caratteri senza creare un'altra corrispondenza secondaria. {
language: "en",
script: blank,
region: "US",
FullMatch: "en-US",
SubMatches: [ "en", "", "US" ],
StartMatch: 1
}
Match( "PT2H1M39S", "PT(?:<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ) Estrae le ore, i minuti e i secondi da un valore di durata ISO 8601. I numeri estratti sono ancora in una stringa di testo; usare la funzione Value per convertirla in numero prima di eseguire operazioni matematiche sulla stessa. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubMatches:["2","1","39"],
StartMatch: 1
}

Esploriamo l'ultimo esempio. Se si desidera convertire questa stringa in un valore data/ora utilizzando la funzione Time, è necessario passare individualmente le corrispondenze secondarie con nome. A questo proposito, è possibile usare la funzione With sul record che Match restituisce:

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
   Time( Value( hours ), Value( minutes ), Value( seconds ) )
)

Per questi esempi, aggiungere un controllo Button, impostare la relativa proprietà OnSelect su questa formula, quindi selezionare il pulsante:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Formula Descrizione Risultato
Match( pangram, "THE", IgnoreCase ) Trovare tutte le corrispondenze di "THE" nella stringa di testo che la variabile pangram contiene. La stringa contiene due corrispondenze, ma viene restituita solo la prima poiché si sta utilizzando Match e non MatchAll. La colonna SubMatches è vuota perché non sono state definite corrispondenze secondarie. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Trovare tutte le corrispondenze di "the" nella stringa di testo che la variabile pangram contiene. Il test fa distinzione tra maiuscole e minuscole, quindi viene trovata solo la seconda istanza di "the". La colonna SubMatches è vuota perché non sono state definite corrispondenze secondarie. MatchAll per pangram.
MatchAll( pangram, "the", IgnoreCase ) Trovare tutte le corrispondenze di "the" nella stringa di testo che la variabile pangram contiene. In questo caso, il test non fa distinzione tra maiuscole e minuscole, quindi vengono trovate entrambe le istanze della parola. La colonna SubMatches è vuota perché non sono state definite corrispondenze secondarie. MatchAll con IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Trova tutte le parole di tre lettere con una "o" nel mezzo. Si noti che "brown" è escluso perché non è una parola di tre lettere e, pertanto, non corrisponde a "\b" (limite di parole). MatchAll per pangram con b, wo, w e b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Cerca la corrispondenza con tutti i caratteri tra "fox" e "dog". {
between: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

Per vedere i risultati di MatchAll in una raccolta:

  1. In una schermata vuota, inserire un controllo Gallery vuota verticale.

  2. Impostare la proprietà Items della raccolta su MatchAll( pangram, "\w+" ) o MatchAll( pangram, MultipleLetters ).

    Raccolta degli elementi.

  3. Selezionare "Aggiungi un elemento dalla scheda Inserisci" al centro del controllo gallery per selezionare il modello della raccolta.

  4. Aggiungere un controllo Label al modello della raccolta.

  5. Impostare la proprietà Text dell'etichetta su ThisItem.FullMatch.

    La raccolta viene riempita con ogni parola nel testo di esempio. Ridimensionare il modello della raccolta e il controllo Label per visualizzare tutte le parole in una schermata.

    Proprietà Text.