1

我有一个正则表达式,但它并没有按照我想要的方式工作

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它将匹配整个字符串。

那么有没有更好的方法来做到这一点?我只想匹配字符串页面,当它后面跟着任意数量的数字时,如果数字后面有任何内容,它应该停止。

4

5 回答 5

4

*表示出现 0 次或多次。 +表示出现 1 次或多次。

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

于 2013-05-30T20:30:51.173 回答
2
page[0-9]*

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

page[0-9]+

这将匹配页面后跟一个或多个数字。

于 2013-05-30T20:30:54.633 回答
1

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

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

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

-

也就是说,针对您的特定问题产生的正则表达式将是:

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

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

于 2013-05-30T21:02:03.870 回答
1

你几乎明白了。只需使用 + 而不是 * 因为这将强制匹配后面有数字的匹配。

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

/page[0-9]+

注意 / ,这会很有帮助,因为没有它,您可能会得到与“notApage123”之类的匹配项

于 2013-05-30T21:02:28.543 回答
-2

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

page[0-9]*$

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

page[0-9]+$
于 2013-05-30T20:30:45.243 回答