用匹配字符串中字符数组的正则表达式替换指定的字符
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 组捕获的文本。
所以我的正则表达式只能找到偶数个转义字符和一个星号:(\\)+([*])
。问题是它不是 select 第一个星号,而是 select 所有行(我需要正则表达式会尝试 "count" 连续一行中的所有转义字符,select 具有偶数个转义符的行,并将星号替换为百分比字符。
为了清楚起见,我将添加一张照片来展示我正在努力实现的任务。 https://postimg.org/image/b51v5qhkz/
我建议将匹配锚定在字符串的开头 ^
,然后匹配 \
以外的任何符号,然后匹配零个或多个双 \
序列,捕获所有这些都归为一组,直到星号。
^([^\]*(?:\\)*)\*
参见regex demo(请注意,演示中的\n
是为了演示目的而添加的,因为输入是多行字符串。如果您要处理单独的字符串,则不需要\n
里面 [^\]
).
细分:
^
- 字符串开头([^\]*(?:\\)*)
- 第 1 组捕获[^\]*
-\
以外的 0+ 个字符
(?:\\)*
-\
的 0+ 个序列
\*
- 文字星号。
替换为 %
,其中 反向引用检索使用第 1 组捕获的文本。