Regex匹配第二个模式后的10个字符



我想在第二个模式之后匹配10个字符:

我的字符串:

www.mysite.de/ep/3423141549/ep/B104RHWZZZ?something

我想要匹配的内容:

B104RHWZZZ

当前匹配的正则表达式:

B104RHWZZZ?something

当前,我的正则表达式是这样的:

(?<=/ep/)(?:(?!/ep/).)*$.

有人能帮我改变正则表达式,它只匹配第二个"/ep/"之后的10个字符("B104RHWZZZ" ?

这取决于您允许匹配哪些字符。如果你想要允许10个非空白字符——不是/?,那么你可以使用;

(?<=/ep/)[^/?s]{10}(?=[^/s]*$)

  • (?<=/ep/)断言/ep/直接向左
  • [^/?s]{10}匹配10次除/?以外的任何非空白字符
  • (?=[^/s]*$)断言右侧不再出现/

Regex演示

或者匹配除/?&以外的1+字符,而不是恰好匹配10个字符:

(?<=/ep/)[^/?&s]+(?=[^/s]*$)

Regex演示

这将匹配字符串作为匹配组1:ep/w+/ep/(w+)

https://regex101.com/r/9tUjxG/1

虽然遍历可以使这个表达式更复杂,这样您就不需要匹配组,但它使(以我的经验)表达式难以阅读、理解和维护/扩展。
这就是为什么我总是保持正则表达式尽可能简单的原因。

最新更新