2014-02-16 43 views
2

("/gallery/static/newest/\d*/desc/\d*/nosets/19/")我可以在RegEx模式中使用變量嗎?

工程....

("/gallery/static/newest/\d*/desc/\d*/nosets/" & strAge & "/")

不起作用....

我怎樣才能讓我的正則表達式模式具有可變的工作?或者我不能?

+0

你應該可以做到這一點。 在這個例子中,你確定strAge是「19」的字符串嗎?你能調試打印連接的字符串嗎?或者使用中間變量並逐步調試。 –

+0

如果'''strAge'''的值不能保證是一個簡單的數字,請記住轉義輸入,參見[RegEx.Escape](http://msdn.microsoft.com/zh-cn/library/system。 text.regularexpressions.regex.escape(v = vs.110).aspx) –

+0

是的,我測試了它,並沒有奏效。我希望有其他的選擇。根據我的經驗,你無法分解一個模式與變量。 – user3316318

回答

0

正如Karl Kieninger所說,似乎有可能在strAge中有額外的字符。你可以刪除這些。在SLN的想法發展,你可以改變, s到|一度你有一個乾淨的字符串:

Imports System.Text.RegularExpressions 

Module Module1 

    Sub Main() 
     Dim textToCheck As String = "/gallery/static/newest/123/desc/456/nosets/20/" 

     Dim strAge As String = "18,19,20,21" 
     ' remove any unwanted chars and change the ","s to "|"s. 
     strAge = Regex.Replace(strAge, "[^0-9,]", "").Replace(","c, "|"c) 
     Dim pattern As String = "/gallery/static/newest/\d*/desc/\d*/nosets/(?:" & strAge & ")/" 
     Console.WriteLine(pattern) 
     Console.WriteLine(textToCheck & " " & Regex.IsMatch(textToCheck, pattern).ToString) 

     Console.ReadLine() 

    End Sub 

End Module 

輸出:

/gallery/static/newest/\d*/desc/\d*/nosets/(?:18|19|20|21)/ 
/gallery/static/newest/123/desc/456/nosets/20/ True 

另外,你真的是\d*以上發生)還是會\d+一個或更多發生)會更好?

+0

我使用\ d *,因爲數字可能是10或97395.它們是隨機數字。另外,strAge可以是20,沒有額外的字符,但它仍然不起作用。只有當我硬編碼它。我已經使用strAge作爲18,19,20,因爲這就是url想要它被格式化的樣子。如果我硬編碼它的作品。但作爲一個變量,它不會。感謝您的解決方案。 – user3316318

+0

@ user3316318看起來'\ d +'在這種情況下最好使用,因爲'\ d *'表示它也可以匹配* no *數字。你是說你想讓URL包含逗號,還是逗號分隔可能匹配的不同號碼? –

相關問題