【问题标题】:How to exclude string that begin with a character如何排除以字符开头的字符串
【发布时间】:2022-01-06 23:42:37
【问题描述】:

我正在使用正则表达式进行匹配

([A-Za-z2-7\/\\+]{52})

虽然上面提到的任何 52 个字符的字符串都会匹配该字符串,但我想排除以 : 开头的字符串,后跟 52 个字符。

我正在使用正则表达式风味 pcre2 例如,虽然下面的字符串与正则表达式匹配,但我不想包含它,因为 52 个字符前面有一个 :

C:\Users\abcdef\AppData\Local\abcdefghijklmnopqr\Testmeli_fi

【问题讨论】:

  • 如果我将您的模式([A-Za-z2-7\/\\+]{52}) 用于C:\Users\abcdef\AppData\Local\abcdefghijklmnopqr\Testmeli_fi 字符串,它只会选择52 个字符:\Users\abcdef\AppData\Local\abcdefghijklmnopqr\Testm。所以如果这个被删除,结果将是C:eli_fi。是你想要的吗?
  • 使用消极的后视。
  • 如果你排除一个以:开头的字符串,它只会匹配从U开始的字符串,而不是\

标签: regex regexp-replace


【解决方案1】:

使用

:([A-Za-z2-7\/\\+]{52})(*SKIP)(*F)|(?1)

regex proof

解释

--------------------------------------------------------------------------------
  :                        ':'
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    [A-Za-z2-                 any character of: 'A' to 'Z', 'a' to
    7\/\\+]{52}              'z', '2' to '7', '\/', '\\', '+' (52
                             times)
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  (*SKIP)(*F)              fail the match and restart after failure
--------------------------------------------------------------------------------
  |                        or
--------------------------------------------------------------------------------
  (?1)                       recurse group 1 pattern

【讨论】:

    【解决方案2】:

    您可以使用锚来断言字符串的开头:

    ^[A-Za-z2-7\/\\+]{52}
    

    查看regex demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-12
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 2017-09-27
      • 2019-10-29
      • 1970-01-01
      相关资源
      最近更新 更多