Regex 正则表达式:在匹配之前删除字符

Regex 正则表达式:在匹配之前删除字符,regex,Regex,我想知道是否有一种方法可以使用正则表达式在[removebefore]n个匹配项之前删除n个出现的字符 可能不清楚,但举例说明了一切: 这是一个测试字符串[removebefore][removebefore][removebefore]。blablabla[removebefore][removebefore] 应该改成 这是一个teststr。blablab 当然,这可以通过匹配和替换/.\[removebefore\]/十几次来实现,但是有没有一种方法可以在一个regexp中实现呢 编辑:

我想知道是否有一种方法可以使用正则表达式在
[removebefore]
n个匹配项之前删除n个出现的字符

可能不清楚,但举例说明了一切:

这是一个测试字符串[removebefore][removebefore][removebefore]。blablabla[removebefore][removebefore]

应该改成

这是一个teststr。blablab

当然,这可以通过匹配和替换
/.\[removebefore\]/
十几次来实现,但是有没有一种方法可以在一个regexp中实现呢

编辑:
我试着用PHP做这件事。事实上,我正在搜索一个正则表达式,它匹配
[anychar]{n}\[removebree\]{n}
,其中n是removebree的数目。

据我所知,正则表达式匹配事物。它们不会删除或修改输入

一个非常简单的算法是:

1-读取输入并计数字符,直到到达[removebefore]

2-到达[removebefore]时,计算另一个变量中[removebefore]的数量

3-从字符数中减去[removebefore]的数目,并将其保存在变量中,我们称之为“n”

4-再次检查输入,打印第一个“n”字符数


在这个算法中需要做一些错误处理,但基本上就是这样。

使用
perl

正则表达式:

s<([^\[]+)((?:\[removebefore\])+)><substr( $1, 0, length($1) - scalar(split(/]\[/, $2)) )>ge
结果:

This is a teststr. blablab

你用哪种语言?只需进行全局替换。您选择的语言可能提供了执行此操作的工具,无论是否使用regexp。Python应该是
mystring.replace('[removebefore]','')
perl script.pl
This is a teststr. blablab