2014-04-14 125 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); 
相關問題