删除段并使用正则表达式替换url

时间:2018-02-02 12:59:04

标签: 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/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

但正则表达式必须考虑第八 。域名也是如此。

我试图成功:https://regex101.com/r/aB5mPn/5但我不能不考虑最后一个案例。

任何人都可以帮助我?

1 个答案:

答案 0 :(得分:2)

如果我没有弄错,你可以在匹配/tag...etc之前添加一个否定的预测,以断言8个案例后面的内容不是/ tag / sd-asd直到字符串{{1}的结尾}

你的正则表达式可能如下:

(?:(?:\/[A-Za-z0-9-]+)?)+(?!\/tag\/[^\/]+$)(\/tag\/[A-Za-z0-9-%]+)(.*)