正则表达式:替换第一个最左边的事件或第一个最右边的事件

Regex: Replacing the first leftmost occurence or the first rightmost occurence

我需要创建一个可以修改类似于以下字符串的内容的正则表达式。

[[12][abad][32][@adb.]

因此,如果我想匹配最左边出现的 a,它会标记以下内容。

[[12][*a*bad][32][@adb.]

或者,如果我匹配最右边出现的@ad,它会标记如下:

 [[12][abad][32][*@ad*b.]

理想情况下,我希望正则表达式有点像一个函数(即,给定一个子字符串 and/or 字符,匹配最左边的第一个匹配项,或者匹配最右边的第一个匹配项输入)。我将能够选择任何子字符串,并且正则表达式中有一些静态组件可以轻松修改(使其像函数一样运行)。

我看到一些类似的问题提到惰性正则表达式 *? 以获得第一个匹配项(例如,我看到一个问题给出 \[\#(.*?)\] 作为答案),但我不是不确定如何整合给出的答案并制作我上面提到的函数,它可以接受任何 string/character 输入并找到它最左边或最右边的出现。

如果您的正则表达式 tool/language 支持使用捕获组替换,那么您可以尝试(对于最左边的 a):

Find:    ^([^a]*)a(.*)$
Replace: *a*

Demo

最右边的 a 使用:

Find:    ^(.*)a(.*)$
Replace: *a*