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

时间:2011-12-10 12:19:27

标签: regex

我想知道是否有一种方法可以使用正则表达式在 n 匹配[removebefore]

之前删除 n 出现的字符

可能不清楚,但一个例子解释了一切:

This is a teststring[removebefore][removebefore][removebefore]. blablabla[removebefore][removebefore]

应改为

This is a teststr. blablab

当然这可以通过匹配和替换/.\[removebefore\]/十几次来完成,但有没有办法在一个正则表达式中执行此操作?

编辑: 我试图用PHP做到这一点。事实上,我正在搜索匹配[anychar]{n}\[removebefore\]{n}的正则表达式,其中n是removebefore的数量。

2 个答案:

答案 0 :(得分:1)

使用perl

的一种可能解决方案

正则表达式:

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

测试:

script.pl 的内容:

use warnings;
use strict;

while ( <DATA> ) {
    s<([^\[]+)((?:\[removebefore\])+)><substr( $1, 0, length($1) - scalar(split(/]\[/, $2)) )>ge;
    print;
}   

__DATA__
This is a teststring[removebefore][removebefore][removebefore]. blablabla[removebefore][removebefore]

运行脚本:

perl script.pl

结果:

This is a teststr. blablab

答案 1 :(得分:0)

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

一个非常简单的算法是:

1 - 读取计算字符的输入,直到找到[removebefore]。

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

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

4 - 再次浏览输入,打印第一个“n”个字符。

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