Twig在第一个特定字符作为分隔符后拆分字符串

时间:2016-08-17 09:35:26

标签: php symfony twig

我的问题与this question的情况相同,但文本中可能会出现多个_

一个例子;

57b42a0557cdd_Filename_whatever.pdf

如何在第一个下划线(包括下划线)之前省略所有内容,以保持其余内容,如Filename_whatever.pdf

随机单引号可以有不同的长度,但它与实际文件名之间总是有一个下划线。

就像上面提到的问题一样; {{ filename|split('_')[1] }}可能有效,但如果实际文件名有下划线会怎么样?

我希望它最好只用于显示目的,因为完整的唯一名称也用于项目的不同部分。

2 个答案:

答案 0 :(得分:9)

documentation所示,split也支持将limit参数作为explode,因此您可do

{{ '57b42a0557cdd_Filename_whatever.pdf'  | split('_', 2)[1] }}
{{ '57b42a0557cdd_Filename_what_ever.pdf' | split('_', 2)[1] }}
{{ '57b42a0557cdd_File_name_whatever.pdf' | split('_', 2)[1] }}

答案 1 :(得分:1)

另一个选项(假设文件是​​实体的一部分)是在实体上编写一个返回所需内容的函数。
例如;

splice.call()

然后在你的twig文件中;

"analysis": {
  "char_filter": {
    "test": {
       "type": "pattern_replace",
       "pattern": "\\b((\\w+)'s)\\b",
       "replacement": "$1 $2 $2s"
    }
 },
  "filter": {
    "my_word_delimiter": {
      "type": "word_delimiter",
      "preserve_original": true,
      "catenate_all": true,
      "split_on_case_change": true,
      "stem_english_possessive": true
    }
  },
  "analyzer": {
    "my_analyzer": {
      "filter": [
        "my_word_delimiter"
      ],
      "char_filter" : ["test"],
      "type": "custom",
      "tokenizer": "whitespace"
    }
  }
}