我想知道是否有一种方法可以使用正则表达式在 n 匹配[removebefore]
可能不清楚,但一个例子解释了一切:
This is a teststring[removebefore][removebefore][removebefore]. blablabla[removebefore][removebefore]
应改为
This is a teststr. blablab
当然这可以通过匹配和替换/.\[removebefore\]/
十几次来完成,但有没有办法在一个正则表达式中执行此操作?
编辑:
我试图用PHP做到这一点。事实上,我正在搜索匹配[anychar]{n}\[removebefore\]{n}
的正则表达式,其中n是removebefore的数量。
答案 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”个字符。
在这个算法中有一些错误处理,但基本上就是这样。