0

その形式で入力しました:

テキスト番号 1: 12.3456°、テキスト番号 2: 78.9012°。

これをここにPHPに置き換えたい:

GPS:12.3456,78.9012: テキスト番号 1: 12.3456°、テキスト番号 2: 78.9012°。

繰り返しになりますが、大きなテキストでの入力は次のとおりです。

"

ブラ ブラ ブラ、ランダム テキスト、ブラ ブラ... テキスト番号 1: 12.3456°、テキスト番号 2: 78.9012°。さらにテキスト...

"

この出力には次が必要です。

"

ブラ ブラ ブラ、ランダム テキスト、ブラ ブラ... GPS:12.3456,78.9012: テキスト番号 1: 12.3456°、テキスト番号 2: 78.9012°。さらにテキスト...

"

出力は、検索する前にこれを追加する必要があります: " GPS:12.3456,78.9012:"

2 つの番号もすべての行で異なります: 12.3456 と 78.9012 その他はすべて固定です。(スペース、その他の文字。)

大きなテキストからこの行を検出して取得する方法が今なら、 " Text number1: 12.3456°, text number2: 78.9012°." も役に立ちます。この行があれば、数字を見つけて置き換えることができます。数字を検出するためにexplodeを使用し(数字の前にスペースを見つけ、数字の後に°を見つけます)、str_replaceを使用して入力を出力に置き換えます。これが最善の方法ではないことはわかっていますが、機能することはわかっています。

(申し訳ありませんが、テキストの書式設定が思いどおりに機能していません。入力、出力を修正し、「,」をスペースに変更しました)

ありがとう!

4

3 に答える 3

1
$text = 'Bla bla bla, random text, bla bla...
Text number1: 12.3456°, text number2: 78.9012°.
And more text';
$pattern = '#[a-zá-úàü\d ,]+:\s?([\d.]+)°[^:]+:\s?([\d.]+)°#i';
return preg_replace_callback($pattern, function($match) {
    return sprintf("GPS:%s,%s:\n%s.",
        $match[1],
        $match[2],
        $match[0]
    );
}, $text);
于 2013-07-13T13:52:38.320 に答える
1

きれいじゃないけど夕食に遅刻!

<?
$text = 'Bla bla bla, random text, bla bla...
Text,number1: 12.3456°, text,number2: 78.9012°.
And more text...';

$lines = array();
foreach(explode("\r\n",$text) as $line){
    $match = array();
    preg_match_all('/\d{0,3}\.?\d{0,20}°/', $line, $result, PREG_PATTERN_ORDER);
    for ($i = 0; $i < count($result[0]); $i++) {
        $match[] = $result[0][$i];
    }
    if(count($match)>0){
        $lines[] = 'GPS:'.str_replace('°','',implode(',',$match));
    }
    $lines[] = $line;

}
echo implode('<br>',$lines);
?>

Bla bla bla, random text, bla bla...
GPS:12.3456,78.9012
Text,number1: 12.3456°, text,number2: 78.9012°.
And more text...
于 2013-07-13T13:46:06.547 に答える