以下は2つのポケットベルアラートメッセージです。正規表現を使用して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]
2番目のアドレスの先頭に4/900があるか、ユニット4/900と表示されていることに気付くでしょう...そしてこれが私の問題の始まりです!アドレスにはさまざまな形式があり、「通常の」番号付きアドレスと「Corner Of」アドレスを別の場所に並べ替えていますが、900に4がないこのアドレスは困惑しています。余分な/は私の表現を台無しにしました...助けて!:)
私の表現では、最初のスラッシュを最初の交差点として使用しますが、上の2番目のケースでは、最初の/がアドレスの一部になります...以下はこれまでのところです。
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
2番目のメッセージの場合、この結果はすべて間違っています。
$jobdet = SMELL OF SMOKE AND ALARM OPERATING
$jobadd = 4
$firstcrossstreet = / 900 SOME ROAD SOMESUBURB /CROSSSTREET1 RD
$secondcrossstreet = //CROSSSTREET2 AV
/が原因であることはわかっていますが、どちらの場合も処理する式を作成するにはどうすればよいですか?