带有前缀和可选后缀的正则表达式

时间:2016-09-27 11:17:40

标签: java regex regex-greedy

这可能是关于SO的正则表达式可选后缀的100 + 1问题,但我没有找到任何,这可以帮助我:(

我需要从常见模式中提取字符串的一部分:

prefix/s/o/m/e/t/h/i/n/g/suffix

使用正则表达式。 前缀是常量,后缀可能根本不显示,因此prefix/(.+)/suffix不符合我的要求。模式prefix/(.+)(?:/suffix)?返回s/o/m/e/t/h/i/n/g/suffix。部分(?:/suffix)?必须更加贪婪。

我想从这些输入字符串中获取s/o/m/e/t/h/i/n/g

prefix/s/o/m/e/t/h/i/n/g/suffix
prefix/s/o/m/e/t/h/i/n/g/
prefix/s/o/m/e/t/h/i/n/g

提前致谢!

2 个答案:

答案 0 :(得分:6)

尝试

prefix\/(.+?)\/?(?:suffix|$)

正则表达式需要知道匹配何时完成,因此匹配 suffix或行尾($),并使捕获非贪婪

See it here at regex101

答案 1 :(得分:1)

如果在prefix(.*?)(?:/?(?:suffix|$))之后的prefix之前允许使用字符,请尝试suffix

这要求匹配尽可能短(不情愿的量词)并且在3个事项之一之前:在输入结束之前的单个斜杠,/suffix或输入的结尾。这与您提供的测试用例中的/s/o/m/e/t/h/i/n/g相匹配,但对于prefix/s/o/m/e/t/h/i/n/g/suff之类的输入会匹配更多(这是好的IMO,因为您不知道/suff是否属于其中比赛或后缀中的拼写错误。)