下面是 2 条寻呼机警报消息,我很头疼,试图使用正则表达式将第二条消息的地址和工作详细信息提取到 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]
您会注意到第二个地址的开头是 4 / 900,或者它可以说是 Unit 4 / 900... 这就是我的问题开始的地方!地址有不同的格式,我有“正常”编号的地址和在其他地方排序的“角落”地址,但这个地址在 900 someroad 没有 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
我知道它是 / 导致它,但我怎样才能制作一个处理这两种情况的表达式?