用匹配字符串中字符数组的正则表达式替换指定的字符

Replace a specified char with regex that maches array of chars in a string

所以我的正则表达式只能找到偶数个转义字符和一个星号:(\\)+([*])。问题是它不是 select 第一个星号,而是 select 所有行(我需要正则表达式会尝试 "count" 连续一行中的所有转义字符,select 具有偶数个转义符的行,并将星号替换为百分比字符。

为了清楚起见,我将添加一张照片来展示我正在努力实现的任务。 https://postimg.org/image/b51v5qhkz/

我建议将匹配锚定在字符串的开头 ^,然后匹配 \ 以外的任何符号,然后匹配零个或多个双 \ 序列,捕获所有这些都归为一组,直到星号。

^([^\]*(?:\\)*)\*

参见regex demo(请注意,演示中的\n是为了演示目的而添加的,因为输入是多行字符串。如果您要处理单独的字符串,则不需要\n 里面 [^\]).

细分:

  • ^ - 字符串开头
  • ([^\]*(?:\\)*) - 第 1 组捕获
    • [^\]* - \
    • 以外的 0+ 个字符
    • (?:\\)* - \
    • 的 0+ 个序列
  • \* - 文字星号。

替换为 %,其中 反向引用检索使用第 1 组捕获的文本。