0

我有这种格式的输入:

文字编号1:12.3456°,文字编号2:78.9012°。

我想用 PHP 替换这里:

GPS:12.3456,78.9012:文字编号1:12.3456°,文字编号2:78.9012°。

因此,再次以大文本输入:

"

bla bla bla,随机文本,bla bla...文本编号1:12.3456°,文本编号2:78.9012°。还有更多文字...

"

此输出需要:

"

bla bla bla,随机文本,bla bla ... GPS:12.3456,78.9012:文本编号1:12.3456°,文本编号2:78.9012°。还有更多文字...

"

输出需要在我搜索之前附加这个:“ GPS:12.3456,78.9012:

这两个数字在所有行中也不同:12.3456 和 78.9012 所有其他数字都是固定的。(空格,其他字符。)

如果您现在如何从大文本中检测并获取此行:“ Text number1: 12.3456°, text number2: 78.9012°.”也有帮助。如果我有这条线,我可以找到数字并替换。我将使用explode 来检测数字(在数字前后查找空格)并使用str_replace 将输入替换为输出。我不知道这是最好的方法,但我知道它的功能。

(抱歉,文本格式无法正常工作。我修复了输入、输出,将“,”更改为空格)

谢谢!

4

3 回答 3

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

echo preg_replace('%([\w\s,]+:\s(\d+\.\d+)°,\s[\w\s,]+:\s(\d+\.\d+)°)%ui', ' GPS:$2,$3: $1', $text);



//Output: 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-13T14:18:04.070 回答
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 回答
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 回答