Longest
Longest[p]
是一个模式对象,它匹配具有模式 p 的最长序列.
更多信息
- Longest 同时处理普通的表达式模式和字符串模式.
- 如果在同一个表达式中出现了许多个 Longest 对象,那些第一次出现的与最长序列相匹配的对象被赋予更高的优先级.
- Longest[p,pri] 给出最长序列优先级 pri. 最长序列匹配尽可能尝试使用高优先级的 Longest 对象.
- 优先级可以是任何表达式,并且按标准 Mathematica Sort 次序排序. Longest[p] 指定最高可能优先级.
- 具有相同优先级的 Longest 对象按它们出现在表达式中的顺序尝试进行计算.
- 如果没有给出明确的 Longest 或 Shortest,普通的表达式模式通常被假设为 Shortest[p],而字符串模式被假设为 Longest[p]. »
- Longest 与 Optional 结合使用时具有特殊意义. Longest[patt:def] 首先会尝试匹配模式 patt,然后才会尝试匹配值 def. 如果在使用 Optional 时没有明确说明 Longest 或 Shortest,那么它实际上是封装于 Longest. »
- 对于普通的表达式,Longest[p] 指定不仅是 p 本身,而且 p 的所有部分也都应该匹配最长序列.
- Longest[p] 对应于“贪婪模式(greedy pattern)”.
- 如果模式中其他处由另外的约束,Longest[p] 可能不对应匹配 p 的绝对最长表达式.
范例
打开所有单元 关闭所有单元基本范例 (1)
通过 Longest 控制有歧义的匹配:
{a, b, c, d, e, f, g} /. {x__, Longest[y__]} -> {{x}, {y}}{a, b, c, d, e, f, g} /. {Longest[x__], y__} -> {{x}, {y}}范围 (2)
Longest 适用于字符串模式:
StringCases["abcdefg", x__ ~~ Longest[__] :> x]{a, b, c, d, e, f, g} /. {Longest[x__, 2], Longest[y__, 1]} :> {{x}, {y}}{a, b, c, d, e, f, g} /. {Longest[x__, 1], Longest[y__, 2]} :> {{x}, {y}}应用 (2)
{x, 3, 5, 7, y, 1, 2, 3, 4, z} /. {a___, Longest[b__Integer], c___} :> {b}g[b_] := {x, b};g[a_, b_] := {a, b};{g[1], g[1, 2]}用 Longest 来把它表示为一个模式:
f[Longest[a_ : x, 1], Longest[b_, 2]] := {a, b}{f[1], f[1, 2]}属性和关系 (4)
对于表达式,当模式中有连续的序列时,最后一个实际上被封装在 Longest 中:
Replace[{a, b, c, d, e, f}, {x__, y__} :> {y}]Replace[{a, b, c, d, e, f}, {x__, Longest[y__]} :> {y}]对于字符串模式,Longest 给出所有最大长度的“贪婪”匹配项:
StringCases["0111011110", Longest["1"..]]对于普通模式,大多数模式都可以有效地封装于 Shortest:
ReplaceList[g[a -> b], g[x___, o___] :> {{x}, {o}}] === ReplaceList[g[a -> b], g[Shortest[x___], Shortest[o___]] :> {{x}, {o}}]字符串模式有效封装于 Longest 中:
StringCases["axxxx", p : ("a" ~~ Repeated["x"]) :> p ] === StringCases["axxxx", p : ("a" ~~ Longest[Repeated["x"]]) :> p ]Shortest[patt:def] 首先尝试使用 def,然后才是 patt:
ReplaceList[{1, 2, 3, 4}, {x___, Shortest[y_ : 0]} :> {y}]当 Longest 与 Optional 组合时,顺序会颠倒:
ReplaceList[{1, 2, 3, 4}, {x___, Longest[y_ : 0]} :> {y}]ReplaceList[{1, 2, 3, 4}, {x___, y_ : 0} :> {y}]可能存在的问题 (3)
有其他约束条件时,Longest 可能不匹配绝对最长的序列:
Cases[{{16, 1, 2, 1, 3, 2, 1, 3, 5, 2, 17}}, {__, a : Longest[PatternSequence[1, __, 2]], ___} :> {a}]Cases[{{16, 1, 2, 1, 3, 2, 1, 3, 5, 2, 17}}, {Longest[__], a : Longest[PatternSequence[1, __, 2]], ___} :> {a}]对于字符串模式,Longest 将匹配所有最长的字串,而不仅仅是绝对最长的字串:
StringReplace["011011110", Longest["1"..] :> "x"]StringReplace["abcdefg", Longest[x__, 1] ~~ y__ -> x ~~ "X" ~~ y]文本
Wolfram Research (2007),Longest,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Longest.html.
CMS
Wolfram 语言. 2007. "Longest." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/Longest.html.
APA
Wolfram 语言. (2007). Longest. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/Longest.html 年
BibTeX
@misc{reference.wolfram_2026_longest, author="Wolfram Research", title="{Longest}", year="2007", howpublished="\url{https://reference.wolfram.com/language/ref/Longest.html}", note=[Accessed: 01-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_longest, organization={Wolfram Research}, title={Longest}, year={2007}, url={https://reference.wolfram.com/language/ref/Longest.html}, note=[Accessed: 01-November-2026]}