正则表达式匹配除两个字符串以外的所

时间:2018-05-31 22:27:32

标签: regex

我们说我有一些日志说:

s3://hello/world
s3n://hello/again

我想得到以下结果:

hello/world
hello/again

我最初的想法是((s3n:\/\/)|(s3:\/\/)),但当然,这只会选择s3n://s3://。我需要否定(反转)这个选择,但它并不像字符串(不是字符)那样简单。

你会如何反转此选择?

2 个答案:

答案 0 :(得分:2)

我建议使用^s3n?:\/\/(.*),可以试用here。您想要的字符串位于第一个捕获组中。

说明:

  • ^ - 匹配字符串的开头。
  • s3n? - 匹配" s3"然后是可选的" n"。
  • :\ / \ / - 匹配冒号和两个正斜杠。
  • (。*) - 匹配并捕获字符串的其余部分。

答案 1 :(得分:0)

你需要捕获带有catch组(括号)的分号后面的内容。为避免捕获“s3n”本身,您可以在该组的开头添加?:

(?:s3n:\/\/|s3:\/\/)(.*)

https://www.phpliveregex.com/p/oak