【问题标题】:Regex Last occurrence?正则表达式 最后一次出现?
【发布时间】:2012-01-12 13:39:52
【问题描述】:

我试图捕捉最后一个反斜杠之后的最后一部分
我需要\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]

【问题讨论】:

  • 感谢您的问题与正则表达式有关,但您确定这是在这里使用的最佳工具吗?大多数标准库都有一个方法可以检索给定目录中的最后一个路径名。这还考虑了给定操作系统上的目录分隔符。
  • @Raskolnikov 我在正则表达式中需要它。我知道 Pth.getFileNameWithoutExtension。问题被标记为正则表达式
  • 好的,很公平,只是确保。我会把它留给更擅长正则表达式的人。

标签: regex path


【解决方案1】:

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

【讨论】:

  • 这对我很有用。 ([^\/]*)$ 匹配 Linux 机器路径中的文件名。你能解释一下插入符号^ 在这种情况下是如何工作的吗?我只用它来表示字符串的开头。
  • @Brad,这是否定的。含义 [^\/] 匹配除 / 之外的任何字符。
【解决方案2】:

这个正则表达式怎么样:\\[^\\]+$

【讨论】:

  • 好吧,我认为不需要在正则表达式中。但我会编辑我的答案
  • err... 我认为它根本不应该是正则表达式,但肯定是为了匹配它,它应该包含在其中。没关系,我只是想到了什么可以在看到它被否决后,你的答案是错误的,这就是我想出的,所以我发表了评论。
  • @michael,不要误会我的意思,感谢您的评论,我只是认为没有必要将它添加到正则表达式 \ ;)
【解决方案3】:

您的否定前瞻解决方案将例如是这样的:

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

here on Regexr

【讨论】:

  • (?: 是非捕获组的开始。 . 是任何字符,如果后面没有 ``. 则检查任何字符
  • Multi 行仅用于所需的 Regexr 测试。它改变了$ 的含义。标准是字符串的结尾,多行是行的结尾。因为 Regexr 中的测试文本有多行,所以我需要这个选项。
  • 如果我想要与原始问题相同的请求,但开头没有 \ 怎么办?
  • (?:[^\\/](?!(\\|/)))+$ 删除开头的斜线并同时处理正斜线和反斜线。它还匹配路径的整个字符串,其中没有任何斜杠,例如manual.doc
  • 在 Tempered Greedy Token 中,点应始终位于前瞻之后:(?:(?!\\).)+。 (ref) 此外,您在 RegExr 上的示例使用两个反斜杠来分隔路径组件;应该只有一个,并且正则表达式应该匹配只有一个。 (demo)
【解决方案4】:

否定的向前看是正确的答案,但它可以写得更简洁:

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

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

【讨论】:

  • 这匹配最后一个反斜杠。 OP 也想匹配它之后的所有内容。
  • 非常有帮助,这个更简洁的版本,虽然只捕获了反斜杠,但让一切都点击了。谢谢。
【解决方案5】:

对我有用的是:

.+(\\.+)$

Try it online!

解释:

.+     - 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

【讨论】:

  • 感谢分解部分:)
  • 我专门寻找与最后一个正斜杠 (/) 匹配的正则表达式。当反斜杠被正斜杠替换时,@stema 上面接受的答案可以完成这项工作。您的匹配每个斜线后的所有内容,这确实不是所寻求的解决方案。我赞成您的回答,因为您的解释很简洁,尽管您的解决方案并没有真正发挥作用
  • 这比负前瞻要简单得多,而且通常要好得多,只要它在一行上不间断,为什么要过于复杂?
  • @ChidozieNnachor,对于您的正斜杠,您是否在括号前放置了一个 single 正斜杠,例如/(.+)?这对我有用,仅在最后一个正斜杠之后捕获文本。如果它对你来说失败了,那么差异可能在于使用的正则表达式方言。
  • @VojtaF,这太久远了,我真的不记得了。也许我确实错了。
【解决方案6】:

当它由\ 完成时,我也使用下面的正则表达式来获得该结果

(\\[^\\]+)\\?$

[Regex Demo]

【讨论】:

    【解决方案7】:

    如果您不想包含反斜杠,而只想包含其后面的文本,请尝试以下操作:([^\\]+)$ 或对于 unix:([^\/]+)$

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      • 2017-08-15
      相关资源
      最近更新 更多