1

我有一个处理电子邮件的 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 个非空行之间开头的行>>

我希望我澄清了我的问题,对不起!

4

2 回答 2

2

我想捕捉以 > 开头的非空行并将它们替换为 >>

该正则表达式如下所示:

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

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

你可以像这样在 PHP 中使用它:

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

你可以从这个演示中看到这个打印:

>> John replied with a nice hi...
>> then added a second hi...
>>
>> Ray said hello
于 2013-07-04T22:57:32.260 回答
0

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

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

$normalized_text = preg_replace("/^>(.+)/m", ">>${1}", $your_text);
于 2013-07-04T22:59:08.377 回答