regex - 在正则表达式中什么是变长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的问题,但我不理解它,在我阅读的所有答案中,人们都在谈论它,因为他们理解它。
解决方案
“任意长度后向模式仅支持长度为 10 ”消息意味着正后\s+
向内的模式可以匹配以 1 开头的未知数量的空白字符。由于未定义上限,因此将其视为“任意长度”看后面的图案”。(?<=...)
由于消息说这些模式“仅支持长度为 10 ”,这意味着(?<=\s+)
您的正则表达式引擎将其视为(?<=\s{1,10})
,这可能足以满足您的大多数用例。无论如何,你不需要+
在这里,(?<=\s)\S
完全等价于你想要得到的。(?<=\s+)
and是等价的(?<=\s)
,因为如果在当前位置的左边有一个或多个或只有一个空格,则它们都是相同的。如果有一个或两个或三个空格字符,则匹配\S
将成功。否则,它将失败。
推荐阅读
- css - pagespeed 模块和 css
- angular - 角度 7 中的复杂路线
- notifications - App Store 服务器通知中的开发人员有效负载(外部数据)
- cluster-analysis - 在聚类算法之前进行预处理的最佳实践是什么?
- c# - 从文本块 wpf 中选择项目组合框
- c# - 将 Viewmodel 绑定到控件 WPF 的 contextMenu 时出现问题
- python - 在时间戳中的日期之间分组并过滤检查另一列
- python - 使用 pandas 将两个不同的数据帧转换为一个 json 文件
- c++ - 通过 TCS 和 TES 传递数据
- typescript - 如何让 Visual Studio Code 真正显示所有 TypeScript 类型错误?