正则表达式之前得到的文字?但是在下划线之后

时间:2017-10-17 11:51:27

标签: regex

我正在开展一个项目,我必须在 之前获得一个ID,但在下划线之后。我必须匹配有字母和数字的ID。

我尝试了^(.+?)\?,但它匹配

之后的所有文字

链接如下:http://localhost/id=some_thing_Id0ID0Id?something=lorem

我该怎么做?

1 个答案:

答案 0 :(得分:1)

请注意,^(.+?)\?模式匹配任何一个或多个字符,直到字符串开头的?字符的第一个(最左边)出现。

您似乎想要从最后_?字符处获取最后一个字母数字部分。

您可以使用

捕获该子字符串
_([a-zA-Z0-9]+)\?

请参阅this regex demo

但是,您可能希望允许匹配,即使您想要获取的子字符串位于字符串的末尾(如果没有?)。然后你可以使用

_([a-zA-Z0-9]+)(?:\?|$)

(?:\?|$)部分与?\?)或(|)字符串结尾($)匹配。请参阅this regex demo

如果不仅仅是数字和字母,您可以使用更通用的解决方案来捕获除?_之外的任何字符:

_([^_?]+)(?:\?|$)

请参阅this regex demo