2017-07-28 138 views
1

我是新來的正則表達式,想知道模式來查找通配符字符串是否存在於另一個字符串中? 例如:
如果* search_string的在main_string(如果主弦與search_string的結尾)
如果SEARCH_STRING *在main_string(如果主弦與search_string的開頭)
如果* search_string的*在main_string(如果主字符串包含search_string的)
如果main_string SEARCH_STRING(如果主串本身SEARCH_STRING)在字符串中查找通配符子字符串的正則表達式

search_string的可以是任何字符串,即使是這樣的「(13786213」或「34576(13786213」,應在字符串中的任何情況下工作嗎?

我試過這個,但不是通用的,它失敗了S爲「(13786213」案等

string search_string = search_string.Replace("*", ".*?"); 
if(new Regex(search_string.ToLower()).IsMatch(main_string)) 
{ 
    \\success 
} 
+0

您擁有的代碼是C#,只使用相關標籤。 –

回答

2

您可以用*分裂,然後逃逸每個塊,然後用.*?加入。

var search_string = string.Join(".*", search_string.Split('*').Select(v => Regex.Escape(v))); 

然後,使不區分大小寫,與RegexOptions.IgnoreCase標誌編譯Regex對象。

這裏是一個C# demo

var search_string = "(137*86213"; 
search_string = string.Join(".*", search_string.Split('*').Select(v => Regex.Escape(v))); 
if(Regex.IsMatch("(137 text here 86213", search_string, RegexOptions.IgnoreCase)) 
{ 
    Console.Write("success"); 
} 
// => success 

如果輸入字符串可以包含換行符,還添加RegexOptions.Singleline選項。

+0

謝謝Wiktor的解決方案,讓我測試各種情況下,並進一步適應:) – jithu

+0

問題可能是一個愚蠢的,但有沒有什麼辦法可以跳過,如果我實際上有一個*內的search_string和通配符(*) :) :) – jithu

+0

@jithu你的意思是你的通配符被定義爲'(*)'?然後你需要用'.Split(new [] {「(*)」},StringSplitOptions.None)'分割。見[這個答案](https://stackoverflow.com/questions/38974292/manual-string-split-in-c-sharp/38974310#38974310)。 –

相關問題