2014-02-16 44 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包含逗号,还是逗号分隔可能匹配的不同号码? –

相关问题