2014-04-14 127 views
0

我正在解析电子邮件主题以获取特定信息。 下面的函数将返回2个字符串之间存在的任何字符串。在2个字符串之间查找字符串

<?php 

function find_string_between_characters($haystack, $starter, $ender) { 
    if(empty($haystack)) return ''; 
    $il = strpos($haystack,$starter,0)+strlen($starter); 
    $ir = strpos($haystack,$ender,$il); 
    return substr($haystack,$il,($ir-$il)); 
} 

$string = 'Re: [Ticket #6588] Site security update'; 
$begin = '[Ticket #'; 
$end = ']'; 
echo find_string_between_characters($string, $begin, $end); // result: 6588 
?> 

,导致: 这正是我想要的,当然。 我几乎没有注意到,如果我改变的变量是这样的:

<?php 
$string = 'New Ticket Email Submitted'; 
$begin = '[Ticket #'; 
$end = ']'; 
echo find_string_between_characters($string, $begin, $end); // result: t Email 
?> 

,导致:牛逼电子邮件

如何调整功能看里面两个字符的精确序列$ begin$ end变量?

+1

一个简单的preg_match()将是容易 –

+0

是图案是恒定的,即[券#6588]? –

+0

是的,幸运的是很稳定。 – coffeemonitor

回答

1

可以使用的preg_match作为

$input_line = 'Re: [Ticket #6588] Site security update' ; 
preg_match("/\[Ticket #(.*?)\]/i", $input_line, $output_array); 

echo $output_array[1]; 


/\[Ticket #(.*?)\]/i 

    \[ matches the character [ literally 
    Ticket # matches the characters Ticket # literally (case insensitive) 
    1st Capturing group (.*?) 
     .*? matches any character (except newline) 
      Quantifier: Between zero and unlimited times, as few times as possible, expanding as needed [lazy] 
    \] matches the character ] literally 
    i modifier: insensitive. Case insensitive match (ignores case of [a-zA-Z]) 
1
$string = 'Re: [Ticket #6588] Site security update'; 
preg_match('/\[Ticket #(.*?)\]/', $string, $matches); 
print_r($matches); 
相关问题