【问题标题】:How to get the previous word with regex?如何使用正则表达式获取前一个单词?
【发布时间】:2010-01-27 07:58:46
【问题描述】:

我有一条这样的路径:

C:\Development.TFS\Examn\R4-branch\Web\OrganisationManager\themes\blue\css

我需要一个正则表达式来消除“蓝色”这个词。我试过了,但还没有找到解决办法。它实际上是从该字符串中获取最后一个单词之前的单词。 请帮忙, 谢谢

【问题讨论】:

  • 您应该说明您使用的语言。

标签: regex word


【解决方案1】:
(\w+)\W+\w+$

匹配倒数第二个单词,将其捕获到反向引用号中。 1,然后匹配一个或多个非单词字符,然后是最后一个单词,然后是 EOL。

如果你真的不想要实际的单词而是匹配路径元素(即使它们包含非单词字符),那么

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

可能会做得更好。

编辑:在“倒数第二个单词组”中添加了 :,因此正则表达式也可以处理相对路径。

【讨论】:

  • 路径元素包含非单词字符,例如'R4-branch' 包含'-'。所以你的正则表达式不会匹配 'C:\Development.TFS\Examn\R4-branch\Web\OrganisationManager\themes\blue-sea\css'
  • 你当然是对的。不过,OP 要求的是文字,而不是路径元素(他可能是这个意思)。将编辑。
  • 是的,这更好!它甚至可以正确处理与我不同的空间 =)
  • 谢谢!确实,我实际上想要那个路径元素,但你的回答很有帮助:)
  • 再次正确。好吧,要求越具体,正则表达式就越好。
【解决方案2】:

你不能简单地使用字符'\'分割字符串然后得到splitResult[splitResult.Count-1]?

您总是可以在您的环境中用路径分隔符替换“\”,以获得更一致的结果

【讨论】:

    【解决方案3】:

    if (eregi('themes\\([a-z].+)\\css', $subject)) { # 匹配成功 } 别的 { #匹配尝试失败 }

    获取蓝色单词的 PHP 示例。

    【讨论】:

    • 也许你必须尝试正则表达式哥们,它是制作正则表达式的好工具
    【解决方案4】:

    您应该在字符串中找到此模式:([\w\s.-]+)\\[\w\s.-]+$。在您的情况下,第一组将包含单词“蓝色”。正则表达式和访问组的确切语法取决于您的编程语言。

    【讨论】:

    • \d\w 的子集,因此\w\d 是多余的。
    【解决方案5】:

    另一种选择:

    (\w+)\\\w+$
    

    【讨论】:

    • 我发布了这个并删除了,因为 OP 路径中的“单词”可以包含非 \w 字符,如 -.space 等。
    猜你喜欢
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2013-04-23
    • 2013-02-18
    • 1970-01-01
    • 2012-12-07
    相关资源
    最近更新 更多