Como fazer expressões regulares em vb.net

Por isso, há muitas perguntas e respostas aqui em torno do tema das expressões regulares. A desvantagem é que a grande maioria das respostas são simplesmente a expressão regular...

Também pesquisei no Google e encontrei centenas de sites. Tentar passar por tudo para uma resposta rápida para entender e implementar não é muito fácil. eles ou estão em uma língua diferente - o que talvez não deva fazer qualquer diferença, embora você escapar de forma diferente em C# para VB e isso leva a confusão sobre o que é um personagem de escape vs um interruptor regex.

a parte com que estou a lutar é entendê-los para que possa implementar algumas, aparentemente, expressões simples.

o meu cenário:

tenho de verificar todos os caracteres numa dada cadeia de caracteres, e se a expressão regular não permitir nenhum dos caracteres, então deverá devolver falso.

Exemplo:

tentei as seguintes expressões (copiar/colar) de várias respostas aqui....)

Dim r As New Regex("^[a-zA-Z0-9 ]*$")

também tentou

Dim r As New Regex("[a-zA-Z0-9\s]")

também tentou

Dim r as New Regex("^[A-Za-z0-9 ]*")

tenho implementado isto como:

Dim r As New Regex(_fontJIAdieuxRegEx) '' where _fontJIAdieuxRegEx is one of the above regex strings.
Dim supported = r.IsMatch(fontName)
Tenho tentado validar algo do género:

darren deve voltar True

da-rren should return False due to the - hyphen

da rren deve voltar True

agora, simplificando, qualquer uma destas expressões irá retornar True para todas as cadeias de caracteres ou False para todas as cordas, por isso estou claramente a fazer algo errado.

O que eu realmente gostaria é que alguém apontasse para onde estou indo errado e também explicasse um pouco sobre a maquiagem da expressão regular.

Assim que os compreender um pouco mais preciso de ter expressões diferentes para permitir outros personagens, tais como ! @ " ' . etc. Então, por favor, não basta colar uma expressão para resolver o exemplo simples acima.

Author: Steven Doggart, 2012-12-12

3 answers

O primeiro padrão é o correcto a usar. O segundo padrão irá retornar verdadeiro se apenas um caractere no texto corresponder. O terceiro padrão retornará verdadeiro se zero ou mais caracteres no início do texto coincidirem, o que sempre acontece.

Não sei o que fizeste para que não funcionasse, mas usá - lo assim funciona.
Dim _fontJIAdieuxRegEx As String = "^[a-zA-Z0-9 ]*$"

Dim r As New Regex(_fontJIAdieuxRegEx)

Console.WriteLine(r.IsMatch("darren"))
Console.WriteLine(r.IsMatch("da-rren"))
Console.WriteLine(r.IsMatch("da rren"))

Resultado:

True
False
True
 5
Author: Guffa, 2012-12-11 21:00:18

As classes regex estão localizadas no sistema de espaços de nomes.Texto.Depressões regulares. Para torná-los disponíveis, colocar Sistema de Importações.Texto.Depressões regulares no início do seu código fonte.

Regex.IsMatch ("assunto","regex") verifica se a expressão regular corresponde ao texto do assunto.

Regex.Substituir ("assunto", "regex", "substituição") faz uma busca e substituição.

Regex.Split ("assunto","regex") divide o texto do assunto em um array of strings as described above. Todos estes métodos aceitam um parâmetro adicional opcional de tipo RegexOptions, como o construtor.

Fonte / mais informações: http://www.regular-expressions.info/dotnet.html

 3
Author: Daan Callaert, 2012-12-11 20:53:17

A sua segunda expressão corresponde a qualquer coisa. O carácter * no final da classe de caracteres diz ao motor de expressão regular para corresponder à classe de caracteres Zero ou mais vezes. Uma vez que não existem outras condições na expressão, qualquer string é válida. A terceira expressão corresponde a qualquer coisa que tenha pelo menos um carácter válido.

A primeira expressão deve funcionar, mas não sou fã das âncoras de início e fim (^ e $) Se não precisar delas. O que eu faria aqui em vez disso é inverter a expressão... procure caracteres que não sejam válidos. A expressão seria assim:

[^a-Za-z0-9 ]

Neste caso, o carácter ^ usado como parte da classe de caracteres significa negar a classe: isto irá corresponder a qualquer carácter que seja não nessa classe, e como não temos âncoras, irá corresponder se tal carácter ocorrer em qualquer parte da cadeia. Agora, é claro, eu devo inverter também o resultado na VB.Net código:

Dim r As New Regex("[^A-Za-z0-9 ]")
Dim supported = Not r.IsMatch(fontName)
 2
Author: Joel Coehoorn, 2012-12-11 21:10:41