【问题标题】:How to negate a substring only in a certain section of the string with regex?如何使用正则表达式仅在字符串的某个部分否定子字符串?
【发布时间】:2021-01-04 19:58:11
【问题描述】:

我正在努力实现以下目标: 我想否定子字符串 '::' 的出现,但仅限于字符串的某个部分。 例如:

ab

我试图用这样的负前瞻来做到这一点:

a(?!.*::).*b

但是在'b'之后出现'::'也会使字符串不匹配,例如:'acb::'

有没有办法用正则表达式实现我想要的?

提前致谢!

【问题讨论】:

  • 使用a(?![^ab]*::)[^ab]*b 或类似的东西。 a 和 b 只是较长模式的占位符吗?
  • 是的,它们是占位符。另外,你能解释一下为什么否定'a'吗?正如我所说,在a 和b 之间可以是任何字符串,而不是'::'
  • 限制匹配时,需要定义边界。试试a(?:(?!a|b|::).)*b。这匹配任何以a 模式开头的字符串,然后匹配任何不以a、b 和:: 模式开头的字符,零次或多次,直到b 模式。
  • 非常感谢。

标签: regex regex-lookarounds regex-negation


【解决方案1】:

你可以使用

a(?:(?!a|b|::).)*b

这匹配任何以a 模式开头的字符串,然后匹配任何不以a、b 和:: 模式开头的字符,零次或多次,直到b 模式。

详情

  • a - a 模式
  • (?: - 非捕获组的开始:
    • (?!a|b|::) - 如果在当前位置右侧有 a、b 或 ::,则匹配失败
    • . - 除换行符以外的任何字符
  • )* - 零次或多次
  • b - b 模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2012-11-04
    • 1970-01-01
    • 2017-08-23
    相关资源
    最近更新 更多