Foo bar 什么鬼?

相信大家对于 foo 和 bar 这两个单词一定再熟悉不过了,它们是计算机图书中最常使用的变量名。不同的字典对 foo 的解释相去甚远,一说来自中国"福"字的发音,又有解释为二战时期的一种武器。

其实将 foo 和 bar 组合在一起所构成的 foobar 应该最能反映其原始的意思,这个可以追溯到二战时期的米国陆军俚语缩写 “FUBAR”,原文是 “Fucked Up Beyond All Repair” 或 “Fucked Up Beyond All Recognition”,大意是事情已经搞的一塌糊涂,面目全非,以至于无法修复和识别。

Foo 和 bar 能成为编程界最常用的两个变量名,也许正体现了程序员们的幽默感。

这段代码是 **FreeMarker** 模板引擎中的字符串处理示例,使用了 `?keep_after` 内建函数结合正则表达式分割字符串。以下是逐步解析: --- ### **代码结构** ```freemarker ${"foo : bar"?keep_after(r"\s*:\s*", "r")} ``` --- ### **执行流程** 1. **字符串输入** - 原始字符串为 `"foo : bar"`,包含一个冒号(`:`)及前后可能的空格。 2. **`?keep_after` 函数** - 作用:提取字符串中**第一个匹配的分隔符之后的部分**。 - 参数: - 第一个参数 `r"\s*:\s*"` 是正则表达式,表示匹配“冒号前后任意数量的空格”。 - `\s*` 匹配0个或多个空白字符(空格、制表符等)。 - `:` 匹配字面冒号。 - 第二个参数 `"r"` 是可选标志,表示将第一个参数视为**正则表达式**(而非普通字符串)。 3. **正则匹配与分割** - 正则表达式 `r"\s*:\s*"` 会匹配 `" : "`(冒号前后各一个空格)。 - 字符串 `"foo : bar"` 被分割为两部分: - 分隔符前:`"foo"` - 分隔符后:`"bar"` - `?keep_after` 返回分隔符后的部分,即 `"bar"`。 --- ### **最终输出** ``` bar ``` --- ### **关键点解析** 1. **正则表达式的作用** - `r"\s*:\s*"` 比直接使用 `":"` 更灵活,能处理冒号前后不定数量的空格(如 `"foo:bar"`、`"foo : bar"` 也能正确分割)。 2. **`"r"` 标志的意义** - 若省略 `"r"`,FreeMarker 会将 `\s*` 视为普通字符串(而非正则语法),导致匹配失败。 - 加上 `"r"` 后,正则引擎会正确解析 `\s` 为空白字符。 3. **与类似函数的对比** - `?keep_before(r"\s*:\s*", "r")` 会返回 `"foo"`(分隔符前的部分)。 - `?split(r"\s*:\s*", "r")` 会返回序列 `["foo", "bar"]`。 --- ### **其他示例** 1. **无空格的情况** ```freemarker ${"foo:bar"?keep_after(r"\s*:\s*", "r")} ``` 输出:`bar`(正则仍能匹配 `:`)。 2. **多个冒号** ```freemarker ${"foo : bar : baz"?keep_after(r"\s*:\s*", "r")} ``` 输出:`bar : baz`(仅提取第一个冒号后的内容)。 3. **未匹配的情况** ```freemarker ${"foo-bar"?keep_after(r"\s*:\s*", "r")} ``` 输出:**空字符串**(因未找到匹配的分隔符)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值