Regex 删除段并用正则表达式替换url中的段

Regex 删除段并用正则表达式替换url中的段,regex,regex-negation,regex-lookarounds,regex-group,regular-language,Regex,Regex Negation,Regex Lookarounds,Regex Group,Regular Language,我做了以下练习: 有这些联系 1. http://example.com/cat1/subcat3/subcat4/tag/this%20is%20page/asdasda?start=130 2. http://example.com/cat1/subcat3/subcat4/tag/this%20is%20pageasdasd 3. example.it/news/tag/this%is%20n%page?adsadsadasd 4. http://example.com/tag/thisp

我做了以下练习:

有这些联系

1. http://example.com/cat1/subcat3/subcat4/tag/this%20is%20page/asdasda?start=130
2. http://example.com/cat1/subcat3/subcat4/tag/this%20is%20pageasdasd
3. example.it/news/tag/this%is%20n%page?adsadsadasd
4. http://example.com/tag/thispage/asdasdasd.-?asds=
5. http://example.com/tag/this%20is%20page/asdasd
6. /tag/this/asdasdasd
7. /tag/asd-asd/feed/this-feed
8. /tag/sd-asd
  • 在第一种情况下,结果必须是:
    http://example.com/tag/this%20is%20page
  • 在第二种情况下,结果必须是:
    http://example.com/tag/this%20is%20pageasdasd
  • 在第三种情况下,结果必须是:
    example.it/tag/this%is%20n%page
  • 在第四种情况下,结果必须是:
    http://example.com/tag/thispage
  • 在第五种情况下,结果必须为:
    http://example.com/tag/this%20is%20page
  • 在第六种情况下,结果必须是:
    /tag/this
  • 在第七种情况下,结果必须是:
    /tag/asd asd
但是第八个不能被regex考虑。域名也是如此

我试图做到这一点:但我不能考虑最后一个案例。


任何人都可以帮助我吗?

如果我没有弄错的话,你可以在匹配/tag…etc之前添加一个负的前瞻,以断言在字符串
(?!\/tag\/[^\/]+$)结束之前,8个案例的后续内容不是/tag/sd asd

您的正则表达式可能如下所示:


如果我没有弄错的话,您可以在匹配/tag…etc之前添加一个负前瞻,以断言在字符串
(?!\/tag\/[^\/]+$)结束之前,八个案例的后续内容不是/tag/sd asd

您的正则表达式可能如下所示:



您的正则表达式看起来运行良好。你对上一个案例的问题是什么?你好!不要认为这个案子没有“不考虑”的意思是“不要改变它”。还是你应该把它完全抹掉?如果是第一个,那么你的正则表达式看起来很好,否则,我看不出逻辑behind@Rafalon正如您所看到的域名,不考虑来自正则表达式(不匹配)。最后一个案例也应该是一样的。对不起,我看不出7和8之间有什么区别,虽然你抓住了第8个案例,但你用它自己替换了它,所以结果和域名一样,不是吗?你的正则表达式看起来工作得很好。你对上一个案例的问题是什么?你好!不要认为这个案子没有“不考虑”的意思是“不要改变它”。还是你应该把它完全抹掉?如果是第一个,那么你的正则表达式看起来很好,否则,我看不出逻辑behind@Rafalon正如您所看到的域名,不考虑来自正则表达式(不匹配)。最后一个案例也应该是一样的。对不起,我看不出7和8之间有什么区别,虽然你抓住了第8个案例,但你用它自己替换了它,所以结果和域名一样,不是吗?最好!非常感谢。即使它有效,我也看不到使用该正则表达式的附加值。它添加了更多的回溯,只是为了防止一个身份替换?@第四只鸟如果我添加更多的字符串,正则表达式将不再工作:。如您所见,倒数第三个现在匹配,倒数第三个不匹配。@Kouga这是因为先行检查是否在字符串的末尾,通过添加内容,这将不再是字符串的结尾。你能做的是在开头使用锚点
^
和行尾使用锚点
$
。例如:以“
/tag/untilthefirstforwardslash
开头的零件将在第2组中。字符串开头排除
/tag/sd asd
的部分在开头的负前瞻中:
(?!\/tag\/[^\/]+$)
@Kouga您需要保留所有当前选择和组,还是只需要一个选择?你想完成什么?如果您的正则表达式引擎支持\K,则可以使用。你可以在一个小时内捕获它们。或者你可以试试看!非常感谢。即使它有效,我也看不到使用该正则表达式的附加值。它添加了更多的回溯,只是为了防止一个身份替换?@第四只鸟如果我添加更多的字符串,正则表达式将不再工作:。如您所见,倒数第三个现在匹配,倒数第三个不匹配。@Kouga这是因为先行检查是否在字符串的末尾,通过添加内容,这将不再是字符串的结尾。你能做的是在开头使用锚点
^
和行尾使用锚点
$
。例如:以“
/tag/untilthefirstforwardslash
开头的零件将在第2组中。字符串开头排除
/tag/sd asd
的部分在开头的负前瞻中:
(?!\/tag\/[^\/]+$)
@Kouga您需要保留所有当前选择和组,还是只需要一个选择?你想完成什么?如果您的正则表达式引擎支持\K,则可以使用。你可以在一个小时内捕获它们。或者你可以试试