Compartilhar via


IsMatch, Matche MatchAll funções

Aplica-se a: Aplicativos de tela Copilot Studio Aplicativos baseados em modelo Power Platform CLI Dataverse funções 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 caracteres 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 as funções retornam o que foi correspondido, incluindo submatches.

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 email válido antes que o resultado seja salvo na fonte de dados. Se a entrada não corresponder aos 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 extrair todas as cadeias de caracteres de texto correspondentes. Extraia submatches 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 registro ou os registros contêm:

Column Tipo Descrição
subcorrespondência nomeada ou subcorrespondências Texto Cada submatch nomeada tem sua própria coluna. Criar uma submatch nomeada usando (?<nome>... ) na expressão regular. Se uma submatch nomeada tiver o mesmo nome de uma das colunas predefinidas, o submatch terá precedência e um aviso será gerado. Renomeie a submatch para evitar esse aviso.
Correspondência completa Texto Toda a cadeia de texto que foi correspondida.
Começar a partida Número A posição inicial da correspondência na cadeia de texto de entrada. O primeiro caractere da cadeia de caracteres retorna 1.
SubMatches, somente se MatchOptions.NumberedSubMatches for usado. Tabela de coluna única de texto (coluna Valor) A tabela de submatches numeradas na ordem em que aparecem na expressão regular. Geralmente, submatches nomeados são mais fáceis de trabalhar e são incentivados. Use a função ForAll ou a função Index para trabalhar com uma subconsulta individual. Se nenhum submatches for definido na expressão regular, essa tabela estará presente, mas vazia.

Essas funções dão suporte a MatchOptions. Por padrão:

  • Essas funções executam uma correspondência que diferencia maiúsculas de minúsculas. Use MatchOptions.IgnoreCase para executar correspondências que não diferenciam maiúsculas de minúsculas.
  • IsMatch corresponde a cadeia de caracteres de texto inteira (MatchOption Completa ) Match e MatchAll procura uma correspondência em qualquer lugar na cadeia de texto (contém MatchOption). Use Complete, Contains, BeginsWith ou EndsWith conforme apropriado para seu cenário.

IsMatch retornará true se a cadeia de caracteres de texto corresponder ao padrão ou false se não o fizer. Match retornará em branco se nenhuma correspondência for encontrada que possa ser testada com a função IsBlank . MatchAll retornará 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 caracteres de texto, considere usar a função Split , que é mais simples e rápida.

Padrões

A chave para usar essas funções é descrever o padrão para corresponder. Você descreve o padrão em uma cadeia de texto como uma combinação de:

  • Caracteres normais, como "abc" ou "123".
  • Padrões predefinidos, como letra, MultipleDigits, ou Email. (A Match enumeração define esses padrões.)
  • Códigos de expressões regulares, como "\d+\s+\d+" ou "[a-z] +".

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

Caracteres 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 cadeia de caracteres "Hello" corresponde exatamente ao padrão "Olá" . Nem mais, nem menos. A cadeia "hello!" de caracteres não corresponde ao padrão devido ao ponto de exclamação no final e porque o caso está errado para a letra "h". (Consulte Match as opções de maneiras de 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 levado literalmente ou use um dos padrões predefinidos. Por exemplo, você pode corresponder à cadeia de "Hello?" caracteres usando o padrão "Hello\\?" com uma barra invertida antes do ponto de interrogação.

Padrões predefinidos

Padrões predefinidos fornecem uma maneira simples para corresponder a um conjunto de caracteres ou uma sequência de vários caracteres. Use o operador de concatenação de cadeia de caracteres e combine suas próprias cadeias de caracteres de texto com membros da Match enumeração:

Match enumeração Descrição Expressão regular
Qualquer Corresponde a qualquer caractere. .
Vírgula Corresponde a uma vírgula ,. ,
Dígito Corresponde a um único dígito ("0" a "9"). \d
Email Corresponde a um endereço de email que contém um símbolo de "arroba" ("@") e um nome de domínio que contém um ponto (".") Consulte a observação
Hífen Corresponde a um hífen. - Consulte a observação
Parênteses Esquerdos Corresponde a um parêntese (esquerdo. \(
Carta Corresponde a uma letra. \p{L}
Vários dígitos Corresponde a um ou mais dígitos. \d+
LetrasMúltiplas Corresponde a uma ou mais letras. \p{L}+
Vários Não Espaços Corresponde a um ou mais caracteres que não adicionam espaço em branco (não a espaço, tabulação ou nova linha). \S+
Espaços Múltiplos Corresponde a um ou mais caracteres que adicionam espaço em branco (espaço, tabulação ou nova linha). \s+
Não-espaço Corresponde a um único caractere que não adiciona espaço em branco. \S
Dígitos opcionais Corresponde a zero, um ou mais dígitos. \d*
Letras Opcionais Corresponde a zero, uma ou mais letras. \p{L}*
Espaços não opcionais Corresponde a zero, um ou mais caracteres que não adicionam espaço em branco. \S*
Espaços Opcionais Corresponde a zero, um ou mais caracteres que adicionam espaço em branco. \s*
Período Corresponde a um ponto ou .ponto. \.
Parênteses Direitas Corresponde a um parêntese )direito. \)
Espaço Corresponde a um caractere que adiciona o espaço em branco. \s
Aba Corresponde a um caractere de tabulação. \t

Por exemplo, o padrão "A" & MultipleDigits corresponde à letra "A" seguida por 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 host.

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.

Expressões regulares são poderosas e servem a uma ampla variedade de finalidades. Eles também podem parecer uma sequência aleatória de marcas de pontuação. Este artigo não descreve todos os aspectos das expressões regulares, mas uma grande quantidade de informações, tutoriais e ferramentas estão disponíveis online.

Expressões regulares têm um longo histórico 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. 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 o Power Fx é executado 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 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. Erros de tempo de criação são relatados à medida que recursos sem suporte são encontrados. Esse é um dos motivos pelos 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 de 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. Email e Match. Hífen é diferente. Os pares alternativos Unicode não são tratados como um único caractere. MatchOptions.NumberedSubMatches é o padrão. A versão das expressões regulares descritas aqui estará disponível no Power Apps em breve, em uma opção de "compatibilidade do 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 caractere corresponde a um conjunto de caracteres e \d corresponde aos dígitos 0 padrão e também aos 9 dígitos definidos na categoria de caractere Unicode "Nd". Há classes de caracteres para letras e números com \w espaços, incluindo novas linhas com \s. Há também classes de caractere inversas que são maiúsculas: \D corresponde a tudo o que \d não o faz.
Um ou mais \d+ Essa expressão regular corresponde a um ou mais números, como 123. Um + após um elemento diz "um ou mais" do último elemento.
Zero ou Um \+?\d Essa expressão regular corresponde a um sinal opcional + seguido por um minério a mais de números, como +123 também apenas 123. Um ? após um elemento dizer "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+ Essa expressão regular corresponde a um + sinal ou, -opcionalmente, e, em seguida, a uma série de números, como -123, +123e 123. Estamos apresentando aqui dois conceitos que geralmente são usados juntos. Primeiro, temos os parênteses que agrupam como conjunto de elementos juntos, para que eles ? atuem. Em segundo lugar, temos | o que diz "isto ou aquilo".
Classe de caractere personalizado (-|\+)?\d+[eE][\-\+]?\d+ Essa expressão regular adiciona um expoente à combinação com duas classes de caracteres, correspondendo +123e-12. Uma classe de caractere é como | alternar fornecendo uma "correspondência de uma dessas coisas" em uma forma mais compacta. Assim como acontece com o +. - tem um significado especial em classes de caracteres de expressão regular, portanto, precisamos escapar dele.
Zero ou mais (-|\+)?\d+\.?\d*[eE][\-\+]?\d+ Essa expressão regular adiciona o decimal após a parte inteiro do número, como -123.456e-89 ou -123.E+32. O \d ponto decimal após a 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+) Por fim, adicionamos grupos de captura para number e exponent. Não só uma expressão regular pode corresponder à cadeia de caracteres inteira, como também pode extrair partes para uso em suas fórmulas, nesse caso, a parte antes do e (ou E) e da parte posterior.

Esses exemplos só dão um pequeno gostinho do que expressões regulares podem fazer. Eles geralmente são usados para validar números de ID, endereços de email, números de telefone, datas e horas e para extrair informações de todos os tipos de arquivos de texto. Continue seu percurso 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 de concatenação de cadeia de caracteres (>).

Enumeração MatchOptions Descrição Impacto em uma expressão regular
MatchOptions.ComeçaCom O padrão deve corresponder desde o início do texto. Adiciona um ^ ao início da expressão regular.
MatchOptions.Complete Padrão para IsMatch o Power Apps. O padrão corresponde a toda a cadeia de caracteres de texto, do início ao fim. Adiciona um ^ ao início e um $ ao final da expressão regular.
MatchOptions.Contém Padrão para Match e MatchAll, e IsMatch fora do Power Apps. O padrão deve aparecer em algum lugar no texto, mas não precisa começar ou terminar com ele. Não modifica 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 disponível no Power Apps. Não modifica a expressão regular. Essa opção é equivalente ao modificador "s" padrão para expressões regulares.
MatchOptions.TerminaCom O padrão deve corresponder ao fim da cadeia de texto. Adiciona um $ ao final da expressão regular.
MatchOptions.FreeSpacing 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 um # são ignorados. Não disponível no Power Apps. Só altera como a sintaxe da expressão regular. Essa opção é equivalente ao modificador "x" padrão para expressões regulares.
MatchOptions.IgnoreCase Trata letras maiúsculas e minúsculas como idênticas. Por padrão, a correspondência diferencia maiúsculas de minúsculas. Não modifica a expressão regular. Essa opção é equivalente ao modificador "i" padrão para expressões regulares.
MatchOptions.Multilinha Altera o comportamento de ^ e $ para corresponder ao final da linha. Não modifica a expressão regular. Essa opção é equivalente ao modificador "m" padrão para expressões regulares.
MatchOptions.NumberedSubMatches As capturas nomeadas são preferenciais 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 retidas. Mas, para expressões regulares mais antigas, trata cada conjunto de parênteses como uma captura numerada incluída na tabela SubMatches no resultado. Padrão no Power Apps. Não modifica a expressão regular. As capturas nomeadas estão desabilitadas e \1 as referências de volta de estilo estã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 ser testada.
  • Padrão – Obrigatório. O padrão a ser testado como uma cadeia de texto. Concatene padrões predefinidos que a Match enumeração define ou fornece 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 conforme o aplicativo é executado. Observe 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 padrão, MatchOptions.Complete é usado. As opções devem ser uma fórmula constante sem variáveis, fontes de dados ou outras referências dinâmicas que mudam conforme o aplicativo é executado.

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

  • Texto – Obrigatório. A cadeia de texto a ser correspondida.
  • Padrão – Obrigatório. O padrão a ser correspondido como uma cadeia de texto. Concatene padrões predefinidos que a Match enumeração define ou forneça 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 padrão, MatchOptions.Contains é usado. As opções devem ser uma fórmula constante sem variáveis, fontes de dados ou outras referências dinâmicas que mudam conforme o aplicativo é executado.

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

  • Texto – Obrigatório. A cadeia de texto a ser correspondida.
  • Padrão – Obrigatório. O padrão a ser correspondido como uma cadeia de texto. Concatene padrões predefinidos que a Match enumeração define ou fornece 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 conforme o aplicativo é executado.
  • Opções – Opcional. Uma combinação de cadeia de texto de valores de enumeração MatchOptions. Por padrão, MatchOptions.Contains é usado. As opções devem ser uma fórmula constante sem variáveis, fontes de dados ou outras referências dinâmicas que mudam conforme o aplicativo é executado.

IsMatch Exemplos

Caracteres comuns

Imagine que seu aplicativo tenha 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 usuário corresponde, exatamente, à cadeia de caracteres "Hello world". verdadeiro
IsMatch( TextInput1.Text, "Good bye" ) Testa se a entrada do usuário corresponde, exatamente, à cadeia de caracteres "Good bye". falso
IsMatch( TextInput1.Text, "hello", Contains ) Testa se a entrada do usuário contém a palavra "hello" (com distinção entre maiúsculas e minúsculas). falso
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Testa se a entrada do usuário contém a palavra "hello" (sem distinção entre 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 do Seguro Social dos Estados Unidos verdadeiro
IsMatch( "joan@contoso.com", Match.Email ) Corresponde a um endereço de email verdadeiro
IsMatch( "123.456", Match.MultipleDigits & Match.Period & Match.OptionalDigits ) Corresponde a uma sequência de dígitos, um ponto 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 ponto e, em seguida, zero ou mais dígitos. Um ponto não aparece no texto para corresponder, portanto, esse 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 um valor de moeda positivo. Se a entrada contiver um ponto decimal, a entrada também deverá conter dois caracteres numéricos após o ponto decimal. Por exemplo, 3,00 é válido, mas 3,1 não é. verdadeiro
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Corresponde a um valor de moeda positivo ou negativo. Se a entrada contiver um ponto decimal, a entrada também deverá conter dois caracteres numéricos após o ponto decimal. verdadeiro
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Corresponde a um número do Seguro Social dos Estados Unidos. Valida o formato, o tipo e o comprimento do campo de entrada fornecido. A cadeia de caracteres a ser correspondida deve conter três caracteres numéricos seguidos por um traço e, em seguida, dois caracteres numéricos seguidos por um traço e, em seguida, quatro caracteres numéricos. verdadeiro
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Mesmo que no exemplo anterior, mas um hífen está fora do lugar 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 dez 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 de email das informações de contato. {
email: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Extrai apenas a parte de email das informações de contato. Nenhum endereço legal foi encontrado (não há nenhum sinal de @), portanto, a função retorna blank. em branco
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Extrai as partes de idioma, script e região da marca de idioma que a função Language retorna. Esses resultados refletem o Estados Unidos; consulte a documentação da função Language para obter mais exemplos. O operador (?: agrupa caracteres sem criar outra subcorrespondência. {
idioma: "en",
script: blank,
região: "EUA",
FullMatch: "en-US",
StartMatch: 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 em uma cadeia de texto; Use a função Value para convertê-la em um número antes que as operações matemáticas sejam executadas nela. {
horas: "2",
minutos: "1",
segundos: "39",
FullMatch: "PT2H1M39S",
StartMatch: 1
}

Vamos analisar o último exemplo. Se você quiser converter essa cadeia de caracteres em um valor de data/hora usando a função Time , deverá passar os submatches nomeados 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 esses exemplos, adicione um controle Button, defina sua propriedade OnSelect como esta fórmula e, em seguida, selecione o botão:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Fórmula Descrição Resultado
Match( pangram, "THE", IgnoreCase ) Localiza 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 somente a primeira é retornada porque você está usando Match e não MatchAll. {
FullMatch: "o",
StartMatch: 32
}
MatchAll( pangram, "the" ) Localiza todas as correspondências de "the" na cadeia de texto que a variável pangram contém. O teste diferencia maiúsculas de minúsculas, portanto, somente a segunda instância de "the" é encontrada. MatchAll para o pangrama.
MatchAll( pangram, "the", IgnoreCase ) Localiza todas as correspondências de "the" na cadeia de texto que a variável pangram contém. Nesse caso, o teste não diferencia maiúsculas de minúsculas, portanto, 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. "brown" é excluído porque não é uma palavra de três letras e, portanto, não corresponde a "\b" (limite da palavra). 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 "raposa" e "cão". {
entre: "pula sobre os preguiçosos",
FullMatch: "raposa pula sobre o cão preguiçoso",
StartMatch: 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 Itens da galeria comoMatchAll ( pangrama, "\w+" ) ou MatchAll( pangrama, MultipleLetters ).

    Galeria de itens.

  3. Selecione "Adicionar um item da guia Inserir" no meio do controle da galeria para selecionar o modelo da galeria.

  4. Adicione um controle Label ao modelo da galeria.

  5. Defina a propriedade Text do rótulo como ThisItem.FullMatch.

    A galeria é preenchida com cada palavra em 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.