2011-04-15 70 views
2

我需要尝试去掉一个文本文件匹配的模式是这样说行:正则表达式剥离一些线条勾勒出一个文本文件

anything SEARCHTEXT;anything;anything

其中SEARCHTEXT将永远是一个静态值每行以换行符结束。有什么机会可以帮助这个regext吗?或者给我一些关于从哪里开始的想法(自从我看了正则表达式以来已经很多年了)。

我打算使用PHP的preg_replace函数()这一点。

谢谢。

+0

在`^。* SEARCHTEXT;。*;。* $`上启用多行和匹配规定SEARCHTEXT不包含对RegEx有意义的字符... – 2011-04-15 14:28:01

回答

4

该解决方案将删除$text包含的子串SEARCHTEXT所有行:

$text = preg_replace('/^.*?SEARCHTEXT.*\n?/m', '', $text); 

我的基准测试表明,该解决方案比'/\n?.*SEARCHTEXT.*$/m'快10倍以上(而这一次能够正确地处理第一行匹配,第二行不匹配的情况)。

2

使用正则表达式的整条生产线相匹配,像这样:

^.*SEARCHTEXT.*$ 

preg_replace将是一个很好的选择。

$str = preg_replace('/\n?.*SEARCHTEXT.*$/m', '', $str); 

\n逃逸匹配行的换行符相匹配。这样匹配的行被删除,替换方法不会在字符串中留下空行。

/m标志使插入符号(^)匹配每行的开头而不是字符串的开头。

+0

刚刚说这不起作用,那么你用斜杠编辑它。很好,谢谢!当我被允许时,将标记为答案:) – webnoob 2011-04-15 14:35:58

+0

一个问题:有没有办法在整个文件上运行它,而不是循环遍历每行并单独运行它?像preg_match_all但替换? – webnoob 2011-04-15 14:37:56

相关问题