Partilhar via


IsMatch, Match, e MatchAll funções

Aplica-se a: Aplicativos do Canvas Aplicativos orientados por modelo do Copilot Studio Funções do Power Platform CLI Dataverse Power Pages

Testa uma correspondência ou extrai partes de uma cadeia de texto com base em um padrão.

Descrição

A IsMatch função testa se uma cadeia de texto corresponde a um padrão que pode incluir caracteres comuns, padrões predefinidos ou uma expressão regular. As Match funções e MatchAll retornam o que foi correspondido, incluindo subcorrespondências.

Use IsMatch para validar o que um usuário digitou em um controle de entrada de texto . Por exemplo, confirme se o usuário inseriu um endereço de e-mail válido antes que o resultado seja salvo na sua fonte de dados. Se a entrada não corresponder aos seus critérios, adicione outros controles que solicitam que o usuário corrija a entrada.

Use Match para extrair a primeira cadeia de caracteres de texto que corresponde a um padrão e MatchAll para extrair todas as cadeias de texto que correspondem. Extraia subcorrespondências para analisar cadeias de caracteres complexas.

Match Retorna um registro de informações para a primeira correspondência encontrada e MatchAll retorna uma tabela de registros para cada correspondência encontrada. O registo ou registos contêm:

Column Tipo Descrição
subcorrespondência ou subcorrespondências nomeadas Texto Cada subcorrespondência nomeada tem sua própria coluna. Crie uma subcorrespondência nomeada usando (?<Designação>... ) na expressão regular. Se uma subcorrespondência nomeada tiver o mesmo nome que uma das colunas predefinidas, a subcorrespondência terá precedência e um aviso será gerado. Renomeie a subcorrespondência para evitar esse aviso.
Jogo completo Texto Toda a cadeia de texto que foi correspondida.
StartMatch Número A posição inicial da correspondência na cadeia de texto de entrada. O primeiro caráter da cadeia devolve 1.
SubMatches, somente se MatchOptions.NumberedSubMatches for usado. Tabela de coluna única de Texto (Value de coluna) A tabela de subcorrespondências numeradas na ordem em que aparecem na expressão regular. Geralmente, as subcorrespondências nomeadas são mais fáceis de trabalhar e são incentivadas. Use a função ForAll ou a função Index para trabalhar com uma subcorrespondência individual. Se nenhuma subcorrespondência for definida na expressão regular, esta tabela estará presente, mas vazia.

Estas funções suportam MatchOptions. Por predefinição:

  • Estas funções fazem uma correspondência sensível a maiúsculas e minúsculas. Utilize MatchOptions.IgnoreCase para efetuar correspondências não sensíveis a maiúsculas e minúsculas.
  • IsMatch corresponde a toda a cadeia de texto (Complete MatchOption), enquanto Match e MatchAll procure uma correspondência em qualquer lugar na cadeia de texto (Contains MatchOption). Utilize Complete, Contains, BeginsWith ou EndsWith, conforme seja adequado ao seu cenário.

IsMatch Retorna true se a cadeia de caracteres de texto corresponder ao padrão ou false se não corresponder. Match retorna em branco se nenhuma correspondência for encontrada que possa ser testada com a função IsBlank . MatchAll retorna uma tabela vazia se nenhuma correspondência for encontrada que possa ser testada com a função IsEmpty .

Se você usar MatchAll para dividir uma cadeia de texto, considere usar a função Dividir , que é mais simples e rápida.

Padrões

A chave para utilizar estas funções reside em descrever o padrão para fazer a correspondência. Descreva o padrão numa cadeia de texto como uma combinação de:

  • Carateres comuns, como "abc" ou "123".
  • Padrões predefinidos, como Letra, MultipleDigits ou E-mail. (O Match enum define esses padrões.)
  • Códigos de expressão regular, como "\d+\s+\d+" ou "[a-z]+".

Combine esses elementos usando o operador string-concatenation &. Por exemplo, "abc" e dígito e "\s+" é um padrão válido que corresponde aos carateres "a", "b", e "c", seguido de um dígito de 0 a 9, seguido de pelo menos um espaço em branco.

Carateres comuns

O padrão mais simples é uma sequência de caracteres comuns que correspondem exatamente.

Por exemplo, quando usada com a IsMatch função, a string "Hello" corresponde exatamente ao padrão "Hello". Nem mais, nem menos. A string "hello!" não corresponde ao padrão por causa do ponto de exclamação no final e porque o caso está errado para a letra "h". (Consulte Match as opções para saber como modificar esse comportamento.)

Na linguagem padrão, os caracteres . ? * + ( ) [ ] ^ $ | \ são reservados para fins especiais. Para usar esses caracteres, prefixe o caractere com uma \ barra invertida para indicar que o caractere deve ser tomado literalmente ou use um dos padrões predefinidos. Por exemplo, você pode corresponder à cadeia de caracteres "Hello?" usando o padrão "Hello\\?" com uma barra invertida antes do ponto de interrogação.

Padrões predefinidos

Os padrões predefinidos oferecem uma forma simples de corresponder a um conjunto de carateres, ou uma sequência de vários carateres. Use o operador de concatenação de cadeia de caracteres & para combinar suas próprias cadeias de texto com membros do Match enum:

Match enum Descrição Expressão regular
Qualquer Corresponde a qualquer caráter. .
Vírgula Corresponde a uma vírgula ,. ,
Algarismo Corresponde a um único dígito ("0" a "9"). \d
Correio Eletrónico Corresponde a um endereço de e-mail que contém um símbolo de "arroba" ("@") e um nome de domínio que contém um ponto (".") Ver nota
Hífen Corresponde a um hífen. - Ver nota
LeftParen Corresponde a um parêntese ( esquerdo. \(
Carta Corresponde a uma letra. \p{L}
Dígitos múltiplos Corresponde a um ou mais dígitos. \d+
Letras Múltiplas Corresponde a uma ou mais letras. \p{L}+
MultipleNonSpaces Corresponde a um ou mais carateres que não adicionam espaços em branco (não espaço, separador ou nova linha). \S+
Espaços Múltiplos Corresponde a um ou mais carateres que adicionam espaços em branco (espaço, separador ou nova linha). \s+
Não-Espaço Corresponde a um único caráter que não adiciona espaço em branco. \S
OpcionalDígitos Corresponde a zero, um ou mais dígitos. \d*
Cartas Opcionais Corresponde a zero, uma ou mais letras. \p{L}*
OptionalNonSpaces Corresponde a zero, um ou mais carateres que não adicionam espaços em branco. \S*
Espaços Opcionais Corresponde a zero, um ou mais carateres que adicionam espaços em branco. \s*
Ponto final Corresponde a um ponto ou ponto .. \.
DireitaParen Corresponde a um parêntese ) certo. \)
Espaço Corresponde a um caráter que adiciona espaço em branco. \s
Separador Corresponde um caráter de separador. \t

Por exemplo, o padrão "A" & MultipleDigits corresponde à letra "A" seguida de um ou mais dígitos.

O Power Apps usa uma definição diferente para Match. EMail e Match. Hífen. Avalie Text( Match.Email ) para ver a expressão regular usada pelo seu anfitrião.

Expressões regulares

O padrão que essas funções usam é chamado de expressão regular. O dialeto específico de expressões regulares do Power Fx é detalhado em Expressões regulares no Power Fx.

As expressões regulares são poderosas e servem uma grande variedade de propósitos. Eles também podem se parecer com uma sequência aleatória de sinais de pontuação. Este artigo não descreve todos os aspetos das expressões regulares, mas uma grande variedade de informações, tutoriais e ferramentas estão disponíveis online.

As expressões regulares têm uma longa história e estão disponíveis em muitas linguagens de programação. Cada linguagem de programação tem seu próprio dialeto de expressões regulares, e há poucos padrões. Nós nos esforçamos para garantir que a mesma expressão regular dê o mesmo resultado em todas as implementações do Power Fx. A compatibilidade não é fácil de realizar, pois Power Fx é executada em cima do JavaScript e do .NET, que têm diferenças significativas. Para acomodar a execução em diferentes plataformas, as expressões regulares do Power Fx são limitadas a um subconjunto de recursos que são amplamente suportados em todo o setor.

Como resultado, algumas expressões regulares que podem funcionar em outros ambientes podem ser bloqueadas ou exigir um ajuste no Power Fx. Os erros de tempo de criação são relatados à medida que recursos sem suporte são encontrados. Esta é uma das razões pelas quais a expressão regular e as opções devem ser uma constante de tempo de criação e não dinâmica (por exemplo, fornecida em uma variável).

Observação

O Power Apps usa uma versão anterior das expressões regulares do Power Fx que tem menos limitações, mas também menos recursos. MatchOptions.DotAll e MatchOptions.FreeSpacing não estão disponíveis e as definições de Match. E-mail e Match. Hífen são diferentes. Os pares substitutos Unicode não são tratados como um único caráter. MatchOptions.NumberedSubMatches é o padrão. A versão das expressões regulares descrita aqui estará disponível no Power Apps em breve, sob uma opção "Compatibilidade com Power Fx V1.0".

Aqui estão alguns elementos básicos de expressões regulares que criam complexidade na análise de um número.

Característica Example Descrição
Classe de caractere predefinido \d Essa expressão regular corresponde a um único número, como 1. Uma classe de caracteres corresponde a um conjunto de caracteres e \d corresponde aos dígitos 0 padrão e 9 também aos dígitos definidos na categoria de caracteres Unicode "Nd". Há classes de caracteres para letras e números com \w e espaços, incluindo novas linhas com \s. Há também classes de caracteres inversos que são maiúsculas: \D corresponde a tudo o que \d não corresponde.
Um ou mais \d+ Essa expressão regular corresponde a um ou mais números, como 123. Um + depois de um elemento diz "um ou mais" do último elemento.
Zero ou Um \+?\d Esta expressão regular corresponde a um sinal opcional + seguido por um ou mais números, como +123 apenas 123. Um ? depois de um elemento diz "isso é opcional, pode ocorrer zero ou uma vez". O + tem uma barra invertida antes dele para distingui-lo como um caractere literal em vez do uso "um ou mais".
Agrupamento e alternância (-|\+)?\d+ Esta expressão regular corresponde a um + sinal ou a um -, opcionalmente e, em seguida, a uma série de números, como -123, +123e 123. Estamos aqui a introduzir dois conceitos que são frequentemente utilizados em conjunto. Em primeiro lugar, temos o parêntese que agrupa como conjunto de elementos juntos, para o ? agir. Em segundo lugar, temos | o que diz "ou isto ou aquilo".
Classe de caractere personalizada (-|\+)?\d+[eE][\-\+]?\d+ Esta expressão regular adiciona um expoente à mistura com duas classes de caracteres, correspondendo +123e-12. Uma classe de personagem é como | a alternância fornecendo um "match one of these things" em uma forma mais compacta. Tal como acontece com o +, - tem um significado especial em classes de caracteres de expressão regular, por isso precisamos escapar dele.
Zero ou mais (-|\+)?\d+\.?\d*[eE][\-\+]?\d+ Esta expressão regular adiciona o decimal após a parte inteira do número, como -123.456e-89 ou -123.E+32. O \d após o ponto decimal tem um * quantificador que diz "zero ou mais vezes" para dígitos decimais após o .
Capturar grupos (?&lt;number&gt;(-|\+)?\d+\.?\d*)[eE](?&lt;exponent&gt;[\-\+]?\d+) Finalmente, adicionamos grupos de captura para number e exponent. Uma expressão regular não só pode corresponder a toda a cadeia de caracteres, como também pode extrair partes para utilização nas suas fórmulas, neste caso a parte antes da e (ou E) e a parte depois.

Estes exemplos apenas dão uma pequena amostra do que as expressões regulares podem fazer. Eles são comumente usados para validar números de identificação, endereços de e-mail, números de telefone, datas e horas, e para extrair informações de todos os tipos de arquivos de texto. Continue sua jornada lendo Expressões regulares no Power Fx, experimente e use a Web para saber mais.

Match Opções

Modifique o comportamento dessas funções especificando uma ou mais opções, que você combina usando o operador string-concatenation (&).

Enumeração MatchOptions Descrição Impacto numa expressão regular
MatchOptions.BeginsCom O padrão tem de corresponder desde o início do texto. Adiciona um ^ ao início da expressão regular.
MatchOptions.Complete Padrão para IsMatch em Power Apps. O padrão corresponde a toda a cadeia de texto, do início ao fim. Adiciona um ^ no início e $ no fim da expressão regular.
MatchOptions.Contém Padrão para Match e MatchAll, e IsMatch fora do Power Apps. O padrão tem de aparecer algures no texto, mas não tem de começá-lo ou terminá-lo. Não altera a expressão regular.
MatchOptions.DotAll Altera o comportamento do . operador (ponto) para corresponder a todos os caracteres, incluindo caracteres de nova linha. Não está disponível em Power Apps. Não altera a expressão regular. Esta opção é o equivalente ao modificador "s" padrão para expressões regulares.
MatchOptions.EndsWith O padrão tem de corresponder ao final da cadeia de texto. Adiciona um $ ao início da expressão regular.
MatchOptions.FreeEspaçamento Caracteres de espaço em branco, incluindo novas linhas, são ignorados na expressão regular. Os comentários de fim de linha que começam com a # são ignorados. Não está disponível em Power Apps. Altera apenas a sintaxe da expressão regular. Esta opção é o equivalente ao modificador padrão "x" para expressões regulares.
MatchOptions.IgnoreCase Trata as letras maiúsculas e minúsculas como idênticas. Por predefinição, a correspondência é sensível a maiúsculas e minúsculas. Não altera a expressão regular. Esta opção é o equivalente do modificador "i" padrão para expressões regulares.
MatchOptions.Multiline Muda o comportamento de ^ e $ para corresponder no final de aline. Não altera a expressão regular. Esta opção é o equivalente do modificador "m" padrão para expressões regulares.
MatchOptions.NumberedSubMatches As capturas nomeadas são preferidas porque são mais fáceis de entender e manter. O desempenho também melhora à medida que as capturas desnecessárias não são mantidas. Mas para expressões regulares mais antigas, trata cada conjunto de parênteses como uma captura numerada que é incluída na tabela SubMatches no resultado. Padrão em Power Apps. Não altera a expressão regular. As capturas nomeadas são desativadas e \1 as referências de retorno de estilo são habilitadas.

Usar MatchAll é o mesmo que usar o modificador "g" padrão para expressões regulares.

Sintaxe

IsMatch( Texto, Padrão [, Opções ] )

  • Texto – Obrigatório. A cadeia de texto a testar.
  • Padrão – Obrigatório. O padrão a testar como uma cadeia de texto. Concatenar padrões predefinidos que o Match enum define ou fornecer uma expressão regular. O padrão deve ser uma fórmula constante sem variáveis, fontes de dados ou outras referências dinâmicas que mudam à medida que o aplicativo é executado. Note-se que a fórmula deve ser expressa como "Match. PredefinedPattern", por exemplo, Match. Email
  • Opções – Opcional. Uma combinação de cadeia de texto de valores de enumeração MatchOptions. Por predefinição, é utilizado MatchOptions.Complete. As opções devem ser uma fórmula constante sem variáveis, fontes de dados ou outras referências dinâmicas que mudam à medida que o aplicativo é executado.

Match( Texto, Padrão [, Opções ] )

  • Texto – Obrigatório. A cadeia de texto a corresponder.
  • Padrão – Obrigatório. O padrão a corresponder como uma cadeia de texto. Concatenar padrões predefinidos que o Match enum define, ou fornecer uma expressão regular. O padrão deve ser uma fórmula constante sem variáveis, fontes de dados ou outras referências dinâmicas que mudam à medida que o aplicativo é executado.
  • Opções – Opcional. Uma combinação de cadeia de texto de valores de enumeração MatchOptions. Por predefinição, é utilizado MatchOptions.Contains. As opções devem ser uma fórmula constante sem variáveis, fontes de dados ou outras referências dinâmicas que mudam à medida que o aplicativo é executado.

MatchAll( Texto, Padrão [, Opções ] )

  • Texto – Obrigatório. A cadeia de texto a corresponder.
  • Padrão – Obrigatório. O padrão a corresponder como uma cadeia de texto. Concatenar padrões predefinidos que o Match enum define ou fornecer uma expressão regular. O padrão deve ser uma fórmula constante sem variáveis, fontes de dados ou outras referências dinâmicas que mudam à medida que o aplicativo é executado.
  • Opções – Opcional. Uma combinação de cadeia de texto de valores de enumeração MatchOptions. Por predefinição, é utilizado MatchOptions.Contains. As opções devem ser uma fórmula constante sem variáveis, fontes de dados ou outras referências dinâmicas que mudam à medida que o aplicativo é executado.

IsMatch Exemplos

Carateres comuns

Imagine que seu aplicativo tem um controle de entrada de texto chamado TextInput1. Os usuários inserem valores nesse controle para armazená-los em um banco de dados.

Os usuários digitam Hello world em TextInput1.

Fórmula Descrição Resultado
IsMatch( TextInput1.Text, "Hello world" ) Testa se a entrada do utilizador corresponde, exatamente, à cadeia "Hello world". verdadeiro
IsMatch( TextInput1.Text, "Good bye" ) Testa se a entrada do utilizador corresponde, exatamente, à cadeia "Good bye". falso
IsMatch( TextInput1.Text, "hello", Contains ) Testa se a entrada do utilizador contém a palavra "hello" (sensível a maiúsculas e minúsculas). falso
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Testa se a entrada do utilizador contém a palavra "hello" (não é sensível a maiúsculas e minúsculas). verdadeiro

Padrões predefinidos

Fórmula Descrição Resultado
IsMatch( "123-45-7890", Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit ) Corresponde a um Número de Segurança Social dos Estados Unidos verdadeiro
IsMatch( "joan@contoso.com", Match.Email ) Corresponde a um endereço de e-mail verdadeiro
IsMatch( "123.456", Match.MultipleDigits & Match.Period & Match.OptionalDigits ) Corresponde a uma sequência de dígitos, um período e, em seguida, zero ou mais dígitos. verdadeiro
IsMatch( "123", Match.MultipleDigits & Match.Period & Match.OptionalDigits ) Corresponde a uma sequência de dígitos, um período e, em seguida, zero ou mais dígitos. Um período não aparece no texto a corresponder, pelo que este padrão não é correspondido. falso

Expressões regulares

Fórmula Descrição Resultado
IsMatch( "986", "\d+" ) Corresponde a um número inteiro maior que zero. verdadeiro
IsMatch( "1.02", "\d+(\.\d\d)?" ) Corresponde a uma quantidade monetária positiva. Se a entrada tiver uma vírgula decimal, a entrada também tem de conter dois carateres numéricos após a vírgula decimal. Por exemplo, 3,00 é válido, mas 3,1 não é. verdadeiro
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Corresponde a uma quantidade monetária positiva ou negativa. Se a entrada tiver uma vírgula decimal, a entrada também tem de conter dois carateres numéricos após a vírgula decimal. verdadeiro
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Corresponde a um Número de Segurança Social dos Estados Unidos Valida o formato, o tipo e o comprimento do campo de entrada apresentado. A cadeia a corresponder deve consistir em três carateres numéricos seguidos por um traço e, em seguida, dois carateres seguidos por um traço e, em seguida, quatro carateres. verdadeiro
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) O mesmo que o exemplo anterior, mas um dos hífenes está fora do local na entrada. falso
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Valida uma senha forte que deve conter oito, nove ou 10 caracteres, pelo menos um dígito e pelo menos um caractere alfabético. A cadeia de caracteres não pode conter caracteres especiais. falso

Match e MatchAll exemplos

Fórmula Descrição Resultado
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>") Extrai apenas a parte do e-mail das informações de contacto. {
e-mail: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
Partida: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Extrai apenas a parte do e-mail das informações de contacto. Não foi encontrado nenhum endereço legal (não existe sinal @), pelo que a função devolve blank. em branco
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Extrai a linguagem, o script e as partes da região da tag da linguagem que a função Language devolve. Estes resultados refletem os Estados Unidos; consulte a documentação da função Language para obter mais exemplos. O operador (?: agrupa caracteres sem criar outra subcorrespondência. {
língua: "en",
script: em branco,
região: "US",
FullMatch: "en-US",
Partida: 1
}
Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ) Extrai as horas, os minutos e os segundos de um valor de duração ISO 8601. Os números extraídos ainda estão numa cadeia de texto; utilize a função Value para convertê-la num número antes de serem efetuadas operações matemáticas nela. {
horas: "2",
minutos: "1",
segundos: "39",
FullMatch: "PT2H1M39S",
Partida: 1
}

Vamos analisar este último exemplo. Se você quiser converter essa cadeia de caracteres em um valor de data/hora usando a função Time , deverá passar as subcorrespondências nomeadas individualmente. Para fazer isso, use a função With operando no registro que Match retorna:

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

Para estes exemplos, adicione um controlo Button, defina a respetiva propriedade OnSelect nesta fórmula e selecione o botão:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Fórmula Descrição Resultado
Match( pangram, "THE", IgnoreCase ) Localize todas as correspondências de "THE" na cadeia de texto que a variável pangram contém. A cadeia de caracteres contém duas correspondências, mas apenas a primeira é retornada porque você está usando Match e não MatchAll. {
FullMatch: "O",
Partida: 32
}
MatchAll( pangram, "the" ) Localize todas as correspondências de "the" na cadeia de texto que a variável pangram contém. O teste é sensível a maiúsculas e minúsculas, pelo que só é encontrada a segunda instância de "the". MatchAll para pangrama.
MatchAll( pangram, "the", IgnoreCase ) Localize todas as correspondências de "the" na cadeia de texto que a variável pangram contém. Neste caso, o teste é sensível a maiúsculas e minúsculas, pelo que ambas as instâncias da palavra são encontradas. MatchAll com IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Localiza todas as palavras de três letras com um "o" no meio. "marrom" é excluído porque não é uma palavra de três letras e, portanto, não corresponde a "\b" (limite de palavras). MatchAll para pangrama com b, wo, w e b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Corresponde a todos os caracteres entre "fox" e "dog". {
entre: "salta por cima do",
FullMatch: "raposa salta por cima do cão preguiçoso",
Partida: 17
}

Para ver os resultados de MatchAll uma galeria:

  1. Em uma tela vazia, insira um controle de galeria vertical em branco.

  2. Defina a propriedade Items da galeria como MatchAll( pangram, "\w+" ) ou MatchAll( pangram, MultipleLetters ).

    Galeria de itens.

  3. Selecione "Adicionar um item do separador Inserir" no meio do controlo gallery para selecionar o modelo da galeria.

  4. Adicione um controlo Label ao modelo da galeria.

  5. Defina a propriedade Text da etiqueta como ThisItem.FullMatch.

    A galeria é preenchida com cada palavra no nosso texto de exemplo. Para ver todas as palavras em uma tela, redimensione o modelo da galeria e o controle de rótulo.

    Propriedade Text.