文本编辑器(Sublime Text、Geany、Notepad++ 等)正则表达式从 URL 字符串中删除除一个参数值之外的所有参数

Text Editor(Sublime Text, Geany, Notepad++ etc.) Regex to remove all parameters from URL string except one parameter-value

我对 Regex 中的高级匹配模式不是很熟悉。

我有一些 Google 搜索 URL 需要清理,而无需按住 Backspace 键 5 秒以从 URL 中删除不必要的参数。

假设我有这个 URL(可能有许多不同的 URL 遵循如下模式):

https://www.google.com/search?source=hp&ei=Ne4pXpSIHIW_9QOD-rmADw&q=laravel+crud+generator&oq=laravel+crud+generator&gs_l=psy-ab.3..0l8.1294.6845..7289...1.0..0.307.3888.0j20j2j1......0....1..gws-wiz.....6..0i131j0i362i308i154i357.PwlZ_932pXo&ved=0ahUKEwjU9pz4tJrnAhWFX30KHQN9DvAQ4dUDCAU&uact=5

我想把它变成漂亮干净的搜索 URL,如下所示:

https://www.google.com/search?q=laravel+crud+generator

如何将 Find/Replace 与问题中提到的任何文本编辑器的正则表达式一起使用?

尝试用 </code></p> 替换此模式:<code>(https://www.google.com/search\?).*(q=[^&]+).*

解释:

  • (https://www.google.com/search\?) = 匹配指定字符串的开头。请注意转义后的 ?,因为它是一个特殊字符。括在括号中,这成为捕获组 #1(可由 </code> 访问)</li> <li><code>.* = 这将匹配任何字符并且也是可选的。只是为了清除字符串开头和您的 q 参数
  • 之间的任何内容
  • (q=[^&]+) = 匹配您的 q 参数直到 & 符号(表示下一个参数)。括在括号中,这成为捕获组 #2(可由 </code> 访问)</li> <li><code>.* = 这将匹配任何字符并且也是可选的。这部分清除了 q 参数值
  • 之后的所有内容

替换:

  • = 只需将您的字符串替换为捕获组 1 和捕获组 2

** 在 Notepad++ 中使用有问题的示例字符串进行测试

我发布其他人使用该解决方案。

在 notepad++ 中请按 CTRL+H 然后 select 下面的正则表达式。

然后放在 Find what: 这个图案上:.+&(q=[^&]+).+ 并在替换为插入:https://www.google.com/search?

现在,轻松按 Replace 按钮进行单个替换或按 ALT+AReplace All 按钮进行所有替换。

勾选Regex101

但是描述:

1- .+& 查找 & 之前 q 之后的所有字符。所以这部分包括https://www.google.com/search?source=hp&ei=Ne4pXpSIHIW_9QOD-rmADw&

2- (q=[^&]+),我们的目标!我们想要 q= 之后的所有内容,接下来 &。所以我们搜索一个以 q= 开头的字符串,然后搜索任何不是 & 的字符。 [^&] 表示不是 & 的字符,+ 表示任何不是 & 的字符超过零次。这部分将包括 q=laravel+crud+generator请注意括号

3- .+ 表示任何字符,包括 &oq=laravel+crud+generator&gs_l=psy-ab.3..0l8.1294.6845..7289...1.0..0.307.3888.0j20j2j1......0....1..gws-wiz.....6..0i131j0i362i308i154i357.PwlZ_932pXo&ved=0ahUKEwjU9pz4tJrnAhWFX30KHQN9DvAQ4dUDCAU&uact=5

好的,还记得第 2 节中的 () 吗?那是一群人。您可以通过此模式 $groupNumber 在替换中使用组,其中 groupNumber 是括号的索引。这里我们只有一个 () 或者实际上只有一组,所以我们的替换语句将是 </code>.</p> <p><strong>最后替换</strong>:<code>https://www.google.com/search?所以第一组中的所有内容都将替换为 $1。

查找:(?<=search\?).*?(laravel\+crud\+generator).*
替换为: