簡體   English   中英

試圖弄清楚如何在正斜杠之間捕獲文本

[英]Trying to figure out how to capture text between slashes regex

我有一個正則表達式

/([/<=][^/]*[/=?])$/g

我正在嘗試捕獲文件路徑中最后一個斜杠之間的文本

/1/2/test/

但是此正則表達式匹配“ /test/ ”,而不僅僅是test 我究竟做錯了什么?

您需要使用環視斷言。

(?<=\/)[^\/]*(?=\/[^\/]*$)

演示

要么

使用下面的正則表達式,然后從組索引1中獲取所需的字符串。

\/([^\/]*)\/[^\/]*$

代碼的問題在於,您的開始和結尾斜杠是捕獲組的一部分。

演示版

  • 文字: /1/2/test/
  • 正則表達式: /\\/(\\[^\\/\\]*?)(?=\\/)/g
  • 捕獲三個列表:“ 1”,“ 2”,“ test”
  • 您使用的語言會影響結果。 例如,JavaScript可能沒有某些外觀,或者可能實際上捕獲了非捕獲組中的某些內容。 但是,以上應按預期工作。 在PHP中,必須將所有/匹配字符轉義(根據regex101.com),這就是為什么未使用更干凈的[/]原因。

如果您只是在最后一場比賽之后(例如test ),則不需要正向前行:

/\/([^\/]*?)\/$/

簡單的方法

比賽:

  1. 每個不是“ / ”的字符
    • 在這里獲取匹配的內容。 這是通過創建反向引用來完成的,即:放在括號內。
  2. 后跟“ / ”,然后是字符串$的末尾

碼:

([^/]*)/$

獲取group(1)的文本


僅當您要避免分組時才更難閱讀

匹配與以前完全相同,除了現在我們告訴正則表達式引擎在嘗試匹配時不要消耗字符(2)。 這是通過先行完成的: (?= )

碼:

[^/]*(?=/$)

獲取匹配對象返回的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM