繁体   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