字符串有两种不同的类型,我为每种字符串都有一个解决方案,但我正在寻找一个组合解决方案。对于这两个我需要id' 28ae569'
输入A:
解决使用:/.*\/.*-(.*)\?/
解决使用:/.*\/.*-(.*)$/
所以,我试图告诉正则表达式的是 ?或字符串结尾'。
我尝试过使用' \?|$
'但它没有用,它给了我整个' 28ae569?param1 = category~%5b715507%7c208524%5d& bi = 1& ps = 200'在第一种情况下。我也尝试过其他一些组合,但我现在在黑暗中射箭。
答案 0 :(得分:6)
使用管道(|
)进行交替时,需要更加具体。您可以使用以下正则表达式:
/([a-f\d]{3,})(?:\?|$)/i
([a-f\d]{3,})
匹配所需的十六进制字符串。它还确保字符串长度至少为3个字符。您可以根据自己的要求进行调整,或者如果您不介意捕获+
之类的单位数字符串,只需将量词更改为0
。
请注意更改周围的括号:(?:\?|$)
- 它指定它应匹配字符串末尾的?
或。 (?:...)
是non-capturing group。
使用之前的正则表达式,这意味着:匹配字符串结尾的.*\/.*-(.*)\?
或,这不是您想要的。
答案 1 :(得分:5)
将连续数字后跟?
或$
,以输入字符串中的第一个为准,作为第1组。
/([a-fA-F0-9]+)(?:\?|$)/