2010-04-14 32 views
0

这个很简单。这个真正简单的RegEx表达式有什么问题?

我试图创建一个正则表达式,这将导致成功匹配时对以下文本

/default.aspx? 

,所以我尝试以下...

^/default.aspx$ 

,它无法匹配它。

有人可以帮忙吗?

(我猜测我搞砸了\和输入表达式中的?)。

回答

2

问题出在.(点),这是一个通配符, 您必须像\.那样转义它。

此外,由于URL末尾有?,因此$(输入结束)位于正则表达式中,因此它不匹配。

正确的正则表达式应该是^/default\.aspx(\?.*)?$

+1

您需要添加\?在$之前或它不匹配。 '?'也是一个保留字符(意思是前一个事物的零个或一个),它也应该用一个反斜杠进行转义。 – James 2010-04-14 02:28:36

+0

ooho。我并不太离谱。所有那些括号内的东西总是让我难住,也。你能解释一下(?。*)的作用吗?我猜((。*))?说括号里的东西..好吧,它是可选的? – 2010-04-14 03:07:37

+0

@Pure:实际上,'(?。*)'是一个语法错误。它应该是'(\?。*)':一个问号跟零个或多个任何东西。正如你所说,最后的问号使得整个组是可选的。 – 2010-04-14 03:14:47

1

在^/Default.aspx的$手段结束的$“字符串的结尾匹配”,但该字符串你与搜索结束“?”。

1

也许这样的事情是比较合适的:

^/default\.aspx(\?.*)?$ 

这将匹配default.aspx,带有可选?whatever-else-that-comes-after

+0

如果您正在执行诸如“。*”之类的操作,是否有任何理由将$保留在正则表达式的末尾? – Davis 2010-04-14 02:29:14

+0

这取决于正则表达式的实现,因为通常'。'不匹配新行。 – James 2010-04-14 02:31:31

+0

这将解释我错过了什么。我通常只匹配单行。 – Davis 2010-04-14 02:32:26

相关问题