如您所知,Google 鏈接可能非常笨拙:
https://www.google.com/search?q=some search here&source=hp&newwindow=1&ei=A_23ssOllsUx&oq=some se....
我保存了許多Google 鏈接,我想清理它們以使它們看起來像這樣:
https://www.google.com/search?q=some search here
唯一的問題是我無法找出 Vim 執行此操作的正確正則運算式模式。
我想它一定是這樣的:
:%s/&source=[^&].*//
:%s/&source=[^&].*[^&]//
:%s/&source=.*[^&]//
但這些都不起作用;它們從 開始&source,并替換到行尾。
此外,search?q=some search here可以出現在 之后的任何地方.com/,所以我不能依賴它每次都在同一個地方。
那么,用于清理這些鏈接的正確 Vim 正則運算式模式是什么?
uj5u.com熱心網友回復:
您的示例可以使用非常簡單的模式輕松處理:
:%s/&.*
因為您想保留第二個引數之前的所有內容,該引數由&字串中的第一個引數標記。
但是,如果q引數可以在查詢字串中的任何位置,如:
https://www.google.com/search?source=hp&newwindow=1&q=some search here&ei=A_23ssOllsUx&oq=some se....
那么,再多的捕獲或諸如此類的東西都不足以用一個模式覆寫所有可能的情況,更不用說可讀的了。在這一點上,腳本撰寫確實是唯一合理的方法,最好使用能夠理解 URL 的語言。
- - 編輯 - -
嗯,刮那個。以下似乎全面作業:
:%s@^\(https://www.google.com/search?\)\(.*\)\(q=.\{-}\)&.*@\1\3
- 我們將其
@用作分隔符,因為/典型 URL 中有許多分隔符。 - 我們捕獲第一組,直到并包括
?標記查詢字串開頭的 。 - 我們匹配
?和第一次出現之間的任何內容,q=而不捕獲它。 - 我們捕獲第二個組,即
q引數,直到并排除下一個&。 - 我們用第一個捕獲組替換整個事物,然后是第二個捕獲組。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/398905.html
