regex - 如何使正则表达式在找到每个匹配项时不消耗文本?
问题描述
我需要检测内容中的四字密码短语,它们是 n 到 m 个单词之间的序列。必须检测所有四个单词的序列,即使是部分重叠的序列,这是我的问题,因为我只知道如何编写一个消耗四个单词的序列,然后从该序列的末尾开始移动到下一个福特序列.
例如,如果我有序列:
随机正确的马电池钉书虫锡帽
我使用:
([A-Za-z0-9]+ ){4}([A-Za-z0-9]+)
它只会找到:
- 随机正确的马电池
和
- 钉虫锡帽
但我实际上需要找到以下所有内容:
随机正确的马电池
正确的马电池订书钉
马电池钉虫
电池钉虫锡
钉虫锡帽
所以提供的字符串中的所有四个单词序列。
我知道我的问题是我的正则表达式在找到第一个匹配项时会消耗前四个单词。
任何人都可以解释如何制作一个只“使用”第一个单词的正则表达式,然后给我从第二个单词开始的下一个有效序列,依此类推?
谢谢!
- 项目清单
解决方案
不能仅使用正则表达式来完成,因为返回的输入已被消耗。
拆分字符串并使用标记,例如
List<String> words = Arrays.asList(sentence.split(" "));
List<List<String>> fourGrams = new ArrayList<>();
for (int i = 0; i < array.length - 4; i++) {
fourGrams.add(words.subList(i, i + 4));
}
推荐阅读
- javascript - 如何为每个 x 值绘制具有多个 y 值的散点图?
- android - 如何在 PJSUA2 中获取“来电的 SIP 标头”?
- javascript - GoJS 中的样式 ContextMenuButton
- node.js - 如何以非交互方式从 node.js 服务器端使用 azure AD 身份验证
- c# - DataTable 选择返回 DBNull 而不是字符串值
- angular - 在执行其他代码之前确保 for 循环中的 observables 全部完成
- python - docopt 中的依赖选项
- ruby - 验证用户输入的 PIN
- python - 如何使用 python websockets 安全地连接到 Bitstamp Websocket v2.0 API?证书验证错误
- reactjs - 如何将 CRA 流程增量迁移到打字稿