我正在开展一个项目,我必须在 之前获得一个ID,但在下划线之后。我必须匹配有字母和数字的ID。
我尝试了^(.+?)\?
,但它匹配?
链接如下:http://localhost/id=some_thing_Id0ID0Id?something=lorem
我该怎么做?
答案 0 :(得分:1)
请注意,^(.+?)\?
模式匹配任何一个或多个字符,直到字符串开头的?
字符的第一个(最左边)出现。
您似乎想要从最后_
到?
字符处获取最后一个字母数字部分。
您可以使用
捕获该子字符串_([a-zA-Z0-9]+)\?
请参阅this regex demo。
但是,您可能希望允许匹配,即使您想要获取的子字符串位于字符串的末尾(如果没有?
)。然后你可以使用
_([a-zA-Z0-9]+)(?:\?|$)
(?:\?|$)
部分与?
(\?
)或(|
)字符串结尾($
)匹配。请参阅this regex demo。
如果不仅仅是数字和字母,您可以使用更通用的解决方案来捕获除?
和_
之外的任何字符:
_([^_?]+)(?:\?|$)
请参阅this regex demo。