regex - 如何使用正则表达式仅在字符串的某个部分否定子字符串?
问题描述
我正在尝试实现以下目标:我想否定子字符串 '::' 的出现,但仅限于字符串的某个部分。例如:
a<anyStringWithout'::'>b<anyStringAlsoWith'::'>
我试图用这样的负前瞻来做到这一点:
a(?!.*::).*b
但是在 'b' 之后出现 '::' 也会使字符串不匹配,例如:'acb::'
有没有办法用正则表达式实现我想要的?
提前致谢!
解决方案
您可以使用
a(?:(?!a|b|::).)*b
这匹配任何以a
模式开头的字符串,然后匹配任何不以a
,b
和::
模式开头的字符,零次或多次,直到b
模式。
细节
a
- 一个a
模式(?:
- 非捕获组的开始:(?!a|b|::)
- 如果存在则匹配失败的负前瞻a
,b
或::
紧邻当前位置的右侧.
- 除换行符以外的任何字符
)*
- 零次或多次b
- 一个b
模式。
推荐阅读
- gstreamer - GStreamer 曝光补偿(曝光值)
- javascript - 如何禁用/限制浏览器重新加载/刷新功能?
- javascript - 接受正数和负数的正则表达式
- swift - 如何在另一个模块中使用 Swift 扩展?
- minecraft - Minecraft 1.12.2 改装服务器:“出现问题”
- c# - 车把块助手未注册
- typescript - 为什么需要添加文本更改事件以及我们如何在 Aurelia 应用程序中添加
- if-statement - vars 在 rewrite_by_lua_block 后不起作用
- reactjs - 为什么即使我没有渲染任何东西,我也会收到“对象作为 React 孩子无效”的错误?
- javascript - 如何自动调整文本区域的大小以适应内容?