2011-12-10 263 views
0

我想知道是否有使用正则表达式前右ň[removebefore]正则表达式:匹配

可能是不清楚的比赛,除去ň出现字符的方式之前删除角色,而是一个例子解释一切:

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

应改为

This is a teststr. blablab

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

编辑: 我试图在PHP中做到这一点。事实上,我正在寻找一个匹配[anychar]{n}\[removebefore\]{n}的正则表达式,其中n是以前的删除数。

+0

哪种语言是您使用?只是做一个全球替代。 – FailedDev

+0

您选择的语言可能会提供工具来执行此操作,无论是否使用正则表达式。 Python会是'mystring.replace('[removebefore]','')' –

回答

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 
0

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

一个非常简单的算法是:

1 - 阅读你的输入计数的字符,直到你得到一个[removebefore。

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

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

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

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