首页 > 解决方案 > 在正则表达式中什么是变长lookbehind-assertion?

问题描述

我复制了一个语句,旨在将字符串转换为 Octave 中的 Camel Case。代码如下。

function camelStr = stringcamelcase (str)
    camelStr = lower(str)
    idx = regexp([' ' camelStr], '(?<=\s+)\S', 'start') -1;
    camelStr(idx) = upper(camelStr(idx));
end

但是我收到了这个警告信息。

警告:正则表达式:仅支持长度为 10 的任意长度查看模式

在互联网上寻找答案,这似乎是一个关于可变长度lookbehind-assertion的问题,但我不理解它,在我阅读的所有答案中,人们都在谈论它,因为他们理解它。

标签: regexmatlaboctavelookbehind

解决方案


任意长度后向模式仅支持长度为 10 ”消息意味着正后\s+向内的模式可以匹配以 1 开头的未知数量的空白字符。由于未定义上限,因此将其视为“任意长度”看后面的图案”(?<=...)

由于消息说这些模式“仅支持长度为 10 ”,这意味着(?<=\s+)您的正则表达式引擎将其视为(?<=\s{1,10}),这可能足以满足您的大多数用例。无论如何,你不需要+在这里,(?<=\s)\S完全等价于你想要得到的。(?<=\s+)and是等价的(?<=\s),因为如果在当前位置的左边有一个或多个或只有一个空格,则它们都是相同的。如果有一个或两个或三个空格字符,则匹配\S将成功。否则,它将失败。


推荐阅读