2016-09-03 35 views
1

次のスニペットでは、pre_matchは最初の緯度の後に大変多くの文字を、その後に経度を返します。
私が後にしているのは、最終的な緯度と経度のペアです。
2つの読み取り値の間のスペースを最大4文字に制限するにはどうすればよいですか?
.*?という表現では文字数が多すぎます。
これを変更して番号を小さくするにはどうすればよいですか?preg_matchパターンでワイルドカードの一致文字数を制限するにはどうすればよいですか?

<?php 
$lcline="tuesday, 20th. light airs and clear weather. p.m. started at latitude 24 degrees 12 minutes took several azimuth, which gave the variation 16 degrees 30 minutes west. put the ship's company to three watches. wind variable; course south 21 degrees 30 minutes west; distance 28 miles; latitude 31 degrees 17 minutes, longitude 17 degrees 19 minutes west; at noon, funchall, island of madeira, north 13 degrees east, 76 miles. "; 

preg_match('/(latitude\s+\d+\s+degrees\s+\d+\s+minutes.*?longitude\s+\d+\s+degrees\s+\d+\s+minutes)/', $lcline, $results); 
echo "results=".$results[0]."<BR><BR>" 
?> 

答えて

0

楽しいですction

{N}

マッチ正確にn回、例えば:テストするためにクリックして "\ {2} W" "\ W \ W" に等しいです。 "BA {1,3}" に一致をテストするためにクリックして "{5}" "AAAAA"

{M、N}

少なくともMが、これ以上のn倍に等しい試験する クリックマッチ少なくともn回 "BA"、 "BAA"、 "baaa"

{M}

:テストするためにクリックして "\ \ dの{2} W" _ 45​​6」、 "A12" に一致します...、 "M12344" ...

{0,1}に相当する1回または0回の一致: "a [cd]"をテストするにはクリックしますか? は、 "a"、 "ac"、 "ad"と一致します。

  • に相当

    一致1回以上、{1}: "A + B" は "AB"、 "AAB"、 "AAAB" と一致するテストするためにクリック...

  • {0、}と等価

マッチ0回以上、:... "\^* B" マッチ "B"、 "^^^ b" をテストするために

リファレンス]をクリックします:http://www.regexlab.com/en/regref.htm

+1

連続4つの空白文字をすべて選択します。変わる*? 〜に。{1,4}は緯度と経度の読みの間のギャップを制限します – user2016210

+0

しかし、キャプテンクックのログのテキストファイルをループして、一度に1行ずつ抽出すると、この行はすべての行で一致するものを見つけることができません。 - 何百もありますが! – user2016210

1

正規表現の初めに.+を追加し、グループ1からの結果を得る:

preg_match('/.+(latitude\s+\d+\s+degrees\s+\d+\s+minutes.*?longitude\s+\d+\s+degrees\s+\d+\s+minutes)/s', $lcline, $results); 
echo "results=",$results[1],"\n"; 

出力:

results=latitude 31 degrees 17 minutes, longitude 17 degrees 19 minutes 
0

uが上限に言うならば、あなたは例えば中括弧 を使用することができます:/\s{4}/これは、これはそれを解決し

+0

この回答は解決策に近いですが、エントリ間でさまざまな数のランダムな文字を見つける方法には答えません – user2016210

関連する問題