0

下面是 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 

我知道它是 / 导致它,但我怎样才能制作一个处理这两种情况的表达式?

4

1 回答 1

0

对于正则表达式,您必须转义正斜杠,因为它们用作表达式的一部分。一个典型的表达式如下所示:

/表达式/修饰符

表达式是您的正则表达式,修饰符会更改执行和结果类型。例如:

/<[^>]+>/g

这应该返回字符串中的所有 HTML 标记。正则表达式是 <[^>]+> 并且它位于两个正斜杠之间。因此,您转义正斜杠 - / - 以实现文字字符串正斜杠。

于 2012-05-01T01:17:15.603 回答