2012-05-01 51 views
0

下面是2尋呼機警報消息和我的時間瘡頭試圖將第二消息的地址和工作細節提取到使用正則表達式一個PHP串...PHP +正則表達式表達式

這裏有2例如消息:

0571040 15:45:21 30-04-12 @@ALERT F546356345 THEB8 STRUC1 SMELL OF SMOKE AND ALARM OPERATING 900 SOME ROAD SOMESUBURB /CROSSSTREET1 RD //CROSSTREET2 AV M 99 A1 (429085) CTHEB CBOROS PT28 [THEB] 

0571040 15:45:21 30-04-12 @@ALERT F546356345 THEB8 STRUC1 SMELL OF SMOKE AND ALARM OPERATING 4/900 SOME ROAD SOMESUBURB /CROSSSTREET1 RD //CROSSTREET2 AV M 99 A1 (429085) CTHEB CBOROS PT28 [THEB] 

你會注意到第二個地址有在開始900分之4或者可以說股九百分之四...這是我的問題開始的地方!地址有不同的格式,我有「正常」編號的地址和其他地方排序的「角落」地址,但是這個地址在地址900沒有4的地址讓我難住了。額外/已經把我的表情搞砸了......幫助! :)

在我表達我用的第一個斜槓作爲第一個交叉路口,但在上面的第一第二種情況/現在是地址的一部分...下面是我到目前爲止有:

function get_string_between2($string, $start, $end){ 
    $string = " ".$string; 
    $ini = strpos($string,$start); 
    if ($ini == 0) return ""; 
    $ini += strlen($start); 
    $len = strpos($string,$end,$ini) - $ini; 
    return substr($string,$ini,$len); 
} 

$fullstring = "$rawPage"; 

if (strpos($fullstring, ' STRUC1 ')!== false) 
{ 
$parsed = get_string_between2($fullstring, "STRUC1", "/"); 
} 
$input = "$parsed"; 
preg_match('/([^0-9]+)(.*)/', $input, $matches); 

$jobdet = "$matches[1]"; 

$jobadd = "$matches[2]"; 

現在,這工作得很好頂消息,我得到這個作爲結果:

$jobdet = SMELL OF SMOKE AND ALARM OPERATING 

$jobadd = 900 SOME ROAD SOMESUBURB 

$firstcrossstreet = /CROSSSTREET1 RD 

$secondcrossstreet = //CROSSSTREET2 AV 

對於第二個消息,這一切都錯了這樣的結果:

$jobdet = SMELL OF SMOKE AND ALARM OPERATING 

$jobadd = 4 

$firstcrossstreet =/900 SOME ROAD SOMESUBURB /CROSSSTREET1 RD 

$secondcrossstreet = //CROSSSTREET2 AV 

我知道這是/引起它,但我怎麼能做一個表達式來處理這兩種情況?

回答

0

使用正則表達式,您必須使用轉義正斜槓,因爲它們用作表達式的一部分。一個典型的表達看起來如下:

/表達/修飾符

表達是您正則表達式,和改性劑改變執行和結果類型。例如:

/<[^>]+>/g 

這應該返回字符串中的所有HTML標記。正則表達式是< [^>] +>,它在兩個正斜槓之間。因此,您可以避免使用正斜槓 -/- 來實現字符串正斜槓。