正则表达式最后一次出现?


122

我正在尝试在最后一个反斜杠之后捕获最后一部分,
我需要使用\Web_ERP_Assistant(带有\

我的想法是:

C:\Projects\Ensure_Solution\Assistance\App_WebReferences\Web_ERP_WebService\Web_ERP_Assistant


\\.+?(?!\\)      //  I know there is something with negative look -ahead `(?!\\)`

但是我找不到。

[Regexer Demo]


2
感谢您提出的有关正则表达式的问题,但是您确定这是在此使用的最佳工具吗?大多数标准库都有一种方法,该方法将检索给定目录中的最后一个路径名。这还考虑了给定OS上的目录分隔符。
史蒂夫·鲁库茨

@Raskolnikov我需要在正则表达式中。我知道Pth.getFileNameWithoutExtension。该问题被标记为正则表达式
Royi Namir

2
好的,很公平,只需确保即可。然后,我将它留给对正则表达式更熟练的人使用。
史蒂夫·鲁库兹

Answers:


95

您的否定超前解决方案例如是:

\\(?:.(?!\\))+$

看到这里Regexr


2
(?:是一个非捕获组的开始。该.是任意字符,此检查,如果后面没有``任何字符。
stema 2011年

Multi行仅用于所需的Regexr测试。它改变了的含义$。标准是字符串的结尾,多行是行的结尾。因为Regexr中的测试文本有多行,所以我需要在这里使用此选项。
stema 2011年

如果我想要与原始问题相同的要求,但开始时没有\,该怎么办?
罗伊·纳米尔

2
(?:[^\\/](?!(\\|/)))+$删除开头的斜杠并应对正斜杠和反斜杠。它还为pathes匹配整个字符串没有他们的任何斜线如manual.doc
mrswadge

5
在脾气暴躁的令牌中,点应始终位于前瞻点之后:(?:(?!\\).)+。(REF)此外,上RegExr您的示例使用两个反斜杠分离的路径分量; 应该只有一个,并且正则表达式应该只匹配一个。(演示
艾伦·摩尔

62

对我有用的一个是:

.+(\\.+)$

在线尝试!

说明:

.+     - any character except newline
(      - create a group
 \\.+   - match a backslash, and any characters after it
)      - end group
$      - this all has to happen at the end of the string

15
感谢零件的分解:)
杰森·布鲁斯

1
我专门在寻找与最后一个正斜杠(/)相匹配的正则表达式。原来,@ stema接受的答案在反斜杠替换为正斜杠时起作用。您的匹配每个斜线之后的所有内容,这实际上不是寻求的解决方案。我赞成您的回答,因为您的解释是简洁的,尽管您的解决方案并没有真正
起到作用

这比否定先行要简单得多,而且通常要好得多,只要它在线路上不间断,为什么会过于复杂?
斯科特·安德森

42

负面的展望是正确的答案,但可以这样写得更清楚:

(\\)(?!.*\\)

这将查找\的出现,然后在未匹配的检查中查找任何数量的字符,后跟您不想看到的字符。因为它是负数,所以只有在找不到匹配项时才匹配。


4
匹配最后一个反斜杠。OP也希望匹配其后的所有内容。
艾伦·摩尔

非常有用的是,此清洁版本虽然只捕获了反斜杠,但却使一切都点击了。谢谢。
马特·宾福德

28

您可以尝试将其锚定到字符串的末尾,例如\\[^\\]*$。尽管我不确定是否绝对必须使用regexp来完成这项任务。


2
这对我来说很棒。 ([^\/]*)$与Linux框路径中的文件名匹配。您能否解释^在此情况下插入符号的工作方式?我只用它来表示字符串的开头。
布拉德(Brad)2014年

@布拉德,是否定。含义[^\/]匹配除以外的任何字符/
Michael Krelin-黑客

9

那么这个正则表达式呢: \\[^\\]+$


好吧,我认为不需要在正则表达式中。但是,我将编辑答案
SERPRO

err ...我根本不认为它应该是正则表达式,但是肯定要包含它,应该包含在匹配中。没关系,我只是在看到它之后才想到您的答案有什么问题被否决了,这就是我想出的,所以我评论了。
Michael Krelin-黑客2011年

@michael,不要误会我,我感谢您的评论,我只是认为没有必要在正则表达式上添加\;)
SERPRO 2011年

5

如果您不希望包含反斜杠,而仅包含其后的文本,请尝试以下操作([^\\]+)$([^\/]+)$


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.