2014-07-25 2 views
-6

Besoin d'aide pour trouver le code C# pour faire une recherche de type SQL (insensible à la casse) pourriez-vous s'il vous plaît m'aider avec le code regex pour cela. Les candidats de modèle et de test sont tous les deux saisis par l'utilisateurBesoin d'une comparaison 'like'

* peut être n'importe où. le motif pourrait donc être .T * S.com

par exemple.

Pattern = *.test.com 
Test Candidate1 = abc.test.com     Result = Pass 
Test Candidate2 = abc.tESt.com     Result = Pass 
Test Candidate3 = abc.itest.com     Result = FAIL 
+0

Regex peut gérer, mais si possible un cas simple comparaison de chaînes insensible dans ce cas. –

+4

Comment '* .test.corp' correspond' abc.test.com'? – mason

+1

Je ne vois pas comment cela peut passer. –

Répondre

1

Si vous ne voulez pas aller la route regex et le candidat se termine toujours par .test.com vous pouvez vous débarrasser de l'* dans votre modèle, puis vérifier avec EndsWith:

if (candidate.EndsWith(pattern, StringComparison.InvariantCultureIgnoreCase)) 
    // you have a match 
2

Dans le cas où le * est à l'avant, vous pouvez utiliser String.EndsWith().

Comme

"abc.test.com" 
    .EndsWidth(".test.com", StringComparison.InvariantCultureIgnoreCase); 

retours true.

0

Si vous voulez que le regex, le modèle est besoin d'être:

public bool IsMatch(string s,string pattern) 
{ 
    return System.Text.RegularExpressions.Regex.IsMatch(s, pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase); 
} 
string pattern = ".*\.test\.com" 
Console.WriteLine(IsMatch("abc.test.com",pattern).ToString()); //PASS 
Console.WriteLine(IsMatch("abc.tESt.com",pattern).ToString()); //PASS 
Console.WriteLine(IsMatch("abc.itest.com",pattern).ToString()); //FAIL