2012-05-01 54 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标记。正则表达式是< [^>] +>,它在两个正斜杠之间。因此,您可以避免使用正斜杠 -/- 来实现字符串正斜杠。