【问题标题】:SpEl (Spring Expression Language) Extracting SubstringSpEl(Spring 表达式语言)提取子字符串
【发布时间】:2013-12-10 19:53:26
【问题描述】:

我在 Spring Integration Message Header 中有一个“相对文件名”参数。

它可以被格式化为

"/tmp/frodo/files/pending/whatever.xml" 或 "/tmp/wilfred/files/completed/new/another.xml"

之前“文件”部分可以是可变长度...

我使用的表达式如下:

headers['relative-filename'].substring(11,) 获取字符串的部分包括和之后 “files”(“files”总是在那里)....这适用于“frodo”,但不适用于“wilfred”。

如何获取“文件”后面的字符串部分?

可以将变量表达式作为“子字符串”的第一个索引,还是有一个正则表达式可以修剪文件的第一部分?

感谢您的任何想法。

【问题讨论】:

    标签: regex spring spring-el


    【解决方案1】:

    此正则表达式适用于在 files 部分之前具有两个名称的所有路径,无论它们的长度如何:

    ^(\/.*?\/.*?\/)files(.*)$
    

    Working DEMO

    【讨论】:

    • 我不是一个“正则表达式”的大人物(我没有像我应该的那样深入研究它们,我真的应该这样做),但这是一个非常优雅的解决方案。谢谢。它非常适合我需要的 SpEl。
    【解决方案2】:

    您可以在表达式中使用indexOf()length()。 7是搜索文本的长度。这是一个例子:

     before: "'a/files/b'.substring(0, 'a/files/b'.indexOf('/files/'))"
     after: "'a/files/b'.substring('a/files/b'.indexOf('/files/') + 7, 'a/files/b'.length())"
    

    【讨论】:

    • 非常感谢.... 测试了这个概念并且它有效。我也在研究“正则表达式”解决方案。
    猜你喜欢
    • 2014-01-14
    • 2019-09-03
    • 2014-07-30
    • 1970-01-01
    • 2011-10-04
    • 2012-05-24
    • 2016-06-27
    • 1970-01-01
    • 2020-07-09
    相关资源
    最近更新 更多