2011-06-07 62 views
2

我想从电子邮件的多行剪辑上做一个复杂的(对我来说)正则表达式。我努力了,没有运气。我试图摆脱任何东西从“开”通过“写道:”使用正则表达式的电子邮件字符串解析

如果您还可以检查它是否包含单词“AcmeCompany”,所以它不会检查所有内容“ “‘中写道:’

到目前为止,我有这样的:/On(.*)AcmeCompany(.*)/im,但它不工作...

say hello, world! 

On Tue, Jun 7, 2011 at 6:18 AM, AcmeCompany < 
[email protected]> wrote: 

感谢您的答复,但似乎还有另外一个问题。

编辑:我发现这个工作:/On[\s\S]+?AcmeCompany[\s\S]+?wrote:/m,但它似乎失败时,电子邮件内容的单词“开”。

say hello, world! 

On a plane!  

On Tue, Jun 7, 2011 at 6:18 AM, AcmeCompany < 
[email protected]> wrote: 

EDIT2:每个邮件客户端不同的是...的Gmail倾向于做,在2号线,从iPhone邮件应用程序做,在1号线,所以它好好尝试始终遵循严格的格式。

1件事情肯定:开始总是使用“开”,结束于“写:”。它还包含一个散列和AcmeCompany,我也可以用它来验证。

+0

你不需要捕捉'。*',试试'On。* AcmeCompany。*' – Dani 2011-06-07 15:23:20

+0

@Dani nope ...没有工作 – tpae 2011-06-07 15:26:24

+0

'.'不会捕捉换行符,这就是为什么你在跨越多行的正则表达式遇到问题。 – 2011-06-07 15:31:07

回答

1

对于新的r我正在增加另一个答复。希望你不会介意。

你可以尝试这样的事情吗?

/On\s(Mon|Tue|Wed|Thu|Fri|Sat)[\s\S]+?AcmeCompany[\s\S]+?wrote:/ 

我again..how想如何使用?

/On.+?AcmeCompany[\s\S]+?wrote:/ 
+0

我在这里修改,但如果再次如果内容有天名!试图思考! – sudipto 2011-06-07 15:54:48

+0

事实证明,并非每个邮件客户端都包含mon/tue/wed ...但每个邮件客户端都包含“On”和“writes:”,所以这只适用于Gmail和Hotmail。 :( – tpae 2011-06-07 16:35:36

1

希望这有助于:

/On[\s\S]+?AcmeCompany[\s\S]+?wrote:/ 

正则表达式上述第一匹配On然后要么的all spacesnon-spaces(一起吞咽所有字符和换行)与一个懒惰重复模式,直到它找到AcmeCompany。同样它匹配all spacesnon-spaces(一起吞咽所有字符和换行符)与懒惰的重复,直到它找到wrote:

+0

嗨,这实际上有效,但它好像收集任何“开”,然后... – tpae 2011-06-07 15:38:36

1

要获得On Tue,Jun前的字符串...:

$str = explode ('On', $yourstring); 
$oldstr = array_pop($str); //Remove the last value of the $str array 
echo trim(implode('On',$str)); //Trim the string to remove any unnecessary line breaks 

以发现隐藏的消息包含AcmeCompany

if(strstr ($oldstr , 'AcmeCompany')) { 
    echo "I found AcmeCompany!"; 
} else { 
    echo "I didn't find AcmeCompany!"; 
} 

希望我的回答是很有用的,即使我没有使用正则表达式。

+0

嗨,有趣的概念..如果我们碰巧在身体的任何地方有“开”,那么这种解决方案将无法正常工作......最后的手段,我可​​能会出现2行 – tpae 2011-06-07 15:35:56

+0

是,但是这表明如果某人的评论是:你好,世界! 在2011年6月7日星期二上午6:18,黑客<黑客@黑客>写道:' – kongr45gpen 2011-06-07 15:41:42

+0

这也是事实......也许最好是剪出最后2行..但是,这是不太可能发生的=/ – tpae 2011-06-07 15:45:46

1

这将工作:

On.*AcmeCompany.* 

或许offtopic,但... 如果你想学习正则表达式,你应该尝试快报的Expresso

实例工作:

enter image description here

+0

这是否在Mac? – sudipto 2011-06-07 15:55:50

+0

伟大的计划!然而,我试图摆脱它之后的行。 – tpae 2011-06-07 16:36:25

+0

@ sudimail Sory,我不知道这一点,但我认为这是Windows只... – Wolfy 2011-06-07 22:18:00

0

试试这个:/On.*AcmeCompany <$[^:]+:/im,在m很重要,因为它可以让$匹配换行符。

相关问题