与正则表达式重叠字符串匹配
当使用带有全局标志(/g)的正则表达式来匹配字符串时,您可以遇到重叠匹配未按预期返回的情况。例如,在字符串“12345”中,使用 /d{3}/g 匹配只会产生匹配“123”,而不是 [“123”, “234”, “345”]。
原因因为这种行为在于正则表达式与全局标志匹配的本质。正则表达式引擎读取并使用匹配的子字符串,将其索引前进到紧随匹配之后的位置。本例中,匹配“123”后,索引移动到位置4,只留下“45”进行后续匹配。
重叠匹配技巧
实现重叠匹配,可以采用多种方法使用:
零宽度断言:
示例(使用 matchAll 的 JavaScript) :
const re = /(?=(\d{3}))/g; console.log(Array.from('12345'.matchAll(re), x => x[1]));
此代码使用正向前瞻测试字符串中与三个连续数字匹配的所有位置。结果是匹配子字符串的数组,包括 ["123", "234", "345"]。
其他注意事项:
以上是如何获得正则表达式和全局标志的重叠匹配?的详细内容。更多信息请关注PHP中文网其他相关文章!