首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

正則表達式實戰:替換連續斜槓但保留開頭的雙斜槓

     編輯:程式設計綜合問答

需求描述

將字符串中非開頭位置的連續斜杠 `/` 替換為單個斜杠,保留開頭的 `//`。例如:

輸入:  //foo//bar
輸出:  //foo/bar

解決方案:零寬斷言 + 貪婪匹配

$re = "/(?

正則拆解

片段含義
(?負向後顧斷言:當前位置不是字符串開頭(`^`)
\/+/匹配一個或多個斜杠(需轉義)

組合含義:匹配非開頭位置的連續斜杠,替換為單個 `/`。

PHP 完整代碼

<?php
$str = "//foo//bar///baz////test";
// 方案一:負向後顧斷言(推薦,語義清晰)
$re1 = '/(?

常見陷阱

  • 錯誤使用 `(?=\b)`:單詞邊界 `\b` 在非單詞字符(如 `/`)之間不匹配,導致失效。
  • 貪婪匹配吞噬開頭:`\/\/+` 會匹配開頭斜杠,需配合斷言排除。
  • 雙重轉義:PHP 雙引號字符串中 `/` 不需轉義,但正則引擎要求轉義,單引號 `/.../` 最省心。

擴展:路徑規範化最佳實踐

實際項目中處理文件路徑/URL,建議使用成熟庫:

  • PHP: realpath(), preg_replace('#/{2,}#', '/', $path)(保留開頭雙斜杠需額外判斷)
  • JavaScript: path.normalize() (Node.js), new URL() (Web)
  • Java: Paths.get(...).normalize()

正則雖強,但處理結構化路徑時,專用 API 更可靠、可維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved