使用regexp解析电子邮件回复引号

时间:2013-07-04 22:51:51

标签: php regex email

我有一个处理电子邮件的PHP脚本,我想抓住这样的字符串:

>> John replied with a nice hi...
>> then added a second hi...
>
>> Ray said hello

请注意,第3行仅包含>而非>>

normalise it,即。把它变成:

>> John replied with a nice hi...
>> then added a second hi...
>>
>> Ray said hello

换句话说,我想要抓住非空行,它以>&用>>

替换它们

我的问题可能看起来毫无价值,但我有一个很好的正则表达式,需要这些>&格式化它们,即。

>> John replied with a nice hi...
>> then added a second hi...
>>
>> Ray said hello

变为

[quote]
    John replied with a nice hi...
    then added a second hi...

    Ray said hello
[/quote]

上面的场景打破我的格式&使最终输出看起来像这样:

[quote_level_1]
    John replied with a nice hi...
    then added a second hi...
[/quote_level_1]

[quote_level_2]
[/quote_level_2]

[quote_level_1]
    Ray said hello
[/quote_level_1]

我的问题是我是否可以使用正则表达式处理这种情况?我尝试了许多正则表达式,但没有一个给我正确的结果:(

我正在使用 PHP 5.4

修改

我担心我没有准确地提出我的问题(对不起),我想要的是抓住非空行,以>&将其替换为>>,但仅当相关行位于以>>

开头的2个非空行之间时才用替换

我希望我澄清了我的问题,抱歉!

2 个答案:

答案 0 :(得分:2)

  

我想捕捉以>开头的非空行。并用>>

替换它们

正则表达式看起来像这样:

/^>(?=[^>])/m

/是分隔符,^匹配行的开头(因为我们使用m修饰符指定了多行模式),然后指定我们必须匹配在第一个>之后,某些不是>

您可以在PHP中使用它:

preg_replace( '/^>(?=[^>])/m', '>>', $str)

你可以从this demo看到这打印出来:

>> John replied with a nice hi...
>> then added a second hi...
>>
>> Ray said hello

答案 1 :(得分:0)

http://php.net/manual/en/function.preg-replace.php

这似乎是一个简单的正则表达式应用程序。

$normalized_text = preg_replace("/^>(.+)/m", ">>${1}", $your_text);