正则表达式匹配页面[0-9],之前或之后没有任何内容

时间:2013-05-30 20:26:12

标签: asp.net regex c#-4.0

我有一个正则表达式,但它并不像我想要的那样工作

page[0-9]*

/pages/search.aspx?pageno=3&pg=232323&hdhdhd/page73733/xyz

在上面的示例中,我唯一想要匹配的是page73733。但我的正则表达式与/pages中的页面匹配,它与pageno = 3

中的页面匹配

我还尝试了page[0-9].*,然后它与page73733匹配,但它也匹配后面的所有内容,以便它实际匹配page73733/xyz

page[0-9].*[^a-zA-Z&?/=]

这似乎做了我想要的,但这似乎也是一种丑陋的方式。另外,如果我有/page123/xyz/page456这样的东西,它将匹配整个字符串。

那么有更好的方法吗?我想匹配字符串页面后跟任意数量的数字,如果有任何数字,它应该停止。

5 个答案:

答案 0 :(得分:4)

*表示出现0次或更多次。 +表示发生一次或多次。

page[0-9]+应该有用。

答案 1 :(得分:2)

page[0-9]*

将匹配页面,后跟零个或多个数字。你想要的是:

page[0-9]+

哪个匹配,后跟一个或多个号码。

答案 2 :(得分:1)

正则表达式page[0-9]*将匹配[0-9] 0次或更多次。 +会匹配一次或多次,?会匹配0或1次。 ?+*的等效方法如下:

  • ?={0,1}
  • *={0,}
  • +={1,}

如果您想匹配日期\\d{4}(-\\d{1,2}){2},这可能会有所帮助2013-5-31

-

也就是说,由此产​​生的Regex针对您的特定问题:

  • page\\d+
  • page\\d{1,}
  • page[0-9]+
  • page[0-9]{1,}

在您的示例"/page123/xyz/page456"中,您可能希望匹配所有匹配项,因此请不要忘记gglobal修饰符。

答案 3 :(得分:1)

你几乎得到了它。只需使用+代替*,因为这会强制匹配后面有数字。

键入该表达式的另一种方法是

/page[0-9]+

注意/,这会有所帮助,因为没有它你可能会得到类似“notApage123”的匹配

答案 4 :(得分:-2)

如果我正确理解您的问题,您只需要将$添加到原始正则表达式,以指定在page之后您希望字符串结束。所以正则表达式将是

page[0-9]*$

此外,这将匹配以page结尾的字符串,如果您只想要以页面结尾的字符串后跟任何数字,请使用此正则表达式

page[0-9]+$