可変長のものと一致させるためにpreg_match_all()を使用する正規表現に問題があります。
私が一致させようとしているのは、「混雑」という単語の後の交通状況です。私が思いついたのは、この正規表現パターンです。
Congestion\s*:\s*(?P<congestion>.*)
ただし、。*はすべてに一致するため、最初のインスタンスをサブジェクト全体の最後まで抽出します。しかし、それは私が望んでいることではありません。3つのインスタンスとして別々に一致させたいと思います。
混雑の背後にある単語は可変長である可能性があるため、より厳密な\ w * \ s * \ w *一致などを考え出すために、間にいくつの単語とスペースがあるかを実際に予測することはできません。
ここからどのように進めることができるかについての手がかりはありますか?
Highway : Highway 26
Datetime : 18-Oct-2010 05:18 PM
Congestion : Traffic is slow from Smith St to Alice Springs St
Highway : Princes Highway
Datetime : 18-Oct-2010 05:18 PM
Congestion : Traffic is slow at the Flinders St / Elizabeth St intersection
Highway : Eastern Freeway
Datetime : 18-Oct-2010 05:19 PM
Congestion : Traffic is slow from Prince St to Queen St
明確にするために編集
ここにあるこれらの非常に適切にフォーマットされたテキストは、実際には非常に不適切にフォーマットされたhtml電子メールを介して受信されます。そこにはランダムな改行が所々に含まれています。たとえば、「渋滞:Prince\nStからQueenStへの交通は\n遅い」などです。
そのため、メールの処理中に、すべてのhtmlコードとランダムな改行を取り除き、json_encode()を使用して、改行のない1つの非常に長い1行の文字列にしました...