在括号后获取文本

时间:2015-06-26 15:55:08

标签: php regex

我想解决以下问题:

我通过imap获取邮件;现在我使用regexp来获取两个quare括号之间的文本(Ticket-ID)。

例如:[Ticket-ID: 84824] Re:Test

preg_match("/\[Ticket-ID: (\S+)\]/", $mail->subject, $matches)

获得了84824 - 但是如何使用PHP获得“Re:Test”或“Test”?

现在我想获得没有任何票号的纯主题等等。我该如何解决?

4 个答案:

答案 0 :(得分:2)

您可以在正则表达式模式中再使用一个捕获组,如下所示:

preg_match("/\[Ticket-ID: (\S+)\]\s*(.*)/", $mail->subject, $matches)

它将在第二场比赛中捕获“Re:Test”,因此您可以从$matches[2]

中检索它

答案 1 :(得分:1)

你可以这样做:

\[[\s\S]+\][\s]*(.*)

DEMO

Regular expression visualization

示例代码:

<?php

$str ='[Ticket-ID: 84824] Re:Test';
preg_match('/\[[\s\S]+\][\s]*(.*)/',$str,$matches);
echo $matches[1];

?>

输出:

Re:Test

如果您只想Test,请使用以下正则表达式:

\[[\s\S]+\][\s]*Re:(.*)

答案 2 :(得分:0)

$string='[Ticket-ID: 84824] Re:Test';
$bracket_location=strpos($string,'] ');
$subject=substr($string,$bracket_location+2,strlen($string)-$bracket_location+2);

循环你的比赛,$ subject会给你Re:Test。

答案 3 :(得分:0)

试试这个正则表达式: \[[^:]+:\s*(\d+)\]

$re = "/\\[[^:]+:\\s*(\\d+)\\]/"; 
$str = "[Ticket-ID: 84824] Re:Test"; 

preg_match($re, $str, $matches);

Demo