文本编辑器(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+A
或 Replace 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).*
替换为:
我对 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+A
或 Replace 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).*
替换为: