Regex 提取路径中的最后一次出现

Regex 提取路径中的最后一次出现,regex,Regex,我有一个路径,我需要提取3个字符的最后一个dir aa-aaa/123/aaaa -> 123 aaa/123/abc -> abc aaa/1234/abcd -> aaa aaa -> aaa 这是我的 但我远不是一个有趣的结果,如果有人有一个好的正则表达式?如果你可以使用捕获组,这应该可以为你做到: .*(\b\w{3}\b) 它跳过所有(*)直到最后三个单词的字符序列(\b\w{3}\b),并将其捕获到组1中 \b确保单词边界,并且\w{3}是三个单词字符(

我有一个路径,我需要提取3个字符的最后一个dir

aa-aaa/123/aaaa -> 123
aaa/123/abc -> abc
aaa/1234/abcd -> aaa
aaa -> aaa
这是我的


但我远不是一个有趣的结果,如果有人有一个好的正则表达式?

如果你可以使用捕获组,这应该可以为你做到:

.*(\b\w{3}\b)
它跳过所有(
*
)直到最后三个单词的字符序列(
\b\w{3}\b
),并将其捕获到组1中

\b
确保单词边界,并且
\w{3}
是三个单词字符(即
a-z
a-z
加上
0-9
)(与路径中允许的大多数字符相匹配。如果需要它来匹配所有,则必须更具体地描述执行环境


.

如果您可以使用捕获组,这应该可以为您做到:

.*(\b\w{3}\b)
它跳过所有(
*
)直到最后三个单词的字符序列(
\b\w{3}\b
),并将其捕获到组1中

\b
确保单词边界,并且
\w{3}
是三个单词字符(即
a-z
a-z
加上
0-9
)(与路径中允许的大多数字符相匹配。如果需要它来匹配所有,则必须更具体地描述执行环境


.

这一个完成了任务,您在组1中获得了目录名:

^(?:.+\/)*([^\/]{3})(?=\/|$)
说明:

^
  (?:       : non capture group
    .+      : 1 or more any character
    \/      : slash
  )*        : repeated 0 or more times
  (         : group 1
    [^\/]{3}: 3 non slash
  )         : end group 1
  (?=       : look ahead
    \/|$    : slash or end of line
  )         : end look ahead

这一个完成了任务,您在组1中获得了目录名:

^(?:.+\/)*([^\/]{3})(?=\/|$)
说明:

^
  (?:       : non capture group
    .+      : 1 or more any character
    \/      : slash
  )*        : repeated 0 or more times
  (         : group 1
    [^\/]{3}: 3 non slash
  )         : end group 1
  (?=       : look ahead
    \/|$    : slash or end of line
  )         : end look ahead

如果目录名中有非单词字符,则不起作用。@t查看注释(最后一行)在答案中。在我的例子中,这些是单词character,但为什么他不首先匹配?@emotte:在第一个例子中,你在第一个dir
aa-aaa
Yes中有一个破折号,但在匹配中,我只希望在目录名中有非单词字符时单词characterIt不起作用。@Toto查看注释(最后一行)在答案中。在我的例子中,这些是单词字符,但是为什么,他不首先匹配?@emotte:在你的第一个例子中,你在第一个dir中有一个破折号
aa
是的,但是在匹配中我只想要单词字符注意,这需要lookaheads,并且
//code>可能不需要根据你的regex风格进行转义。最坏的情况下,即使
/
是免费转义的,也没关系。感谢您的解释!如果是多行输入,如示例所示,它可以在多行上匹配。这不太可能,但可以通过将
换行符
添加到否定类中来避免。@casimirithippolyte可能会认为这会降低正则表达式的可维护性,但是是的,我不是想说答案不正确。注意这需要lookaheads,而且根据你的正则表达式的味道,
/
可能不需要转义。在最坏的情况下,即使是免费转义,
/
,也没关系。感谢你的解释!如果是多行输入,如示例所示,它可以与mul匹配有几行,。这不太可能,但可以通过向否定类添加
换行符
来避免。@casimirithippolyte有人可能会认为这会降低正则表达式的可维护性,但我不是说答案不正确