0

基本的に、次のテキストが$textvarに保存されています。

$text = 'An airplane accelerates down a runway at 3.20 m/s2 for 32.8 s until is finally lifts off the ground. Determine the distance traveled before takeoff'.

私は、という名前の配列からテキストのいくつかのキーワードを置き換える関数を持っています$replacements(私はそれにvar_dumpを行いました):

'm' => string 'meter' (length=5)
'meters' => string 'meter' (length=5)
's' => string 'second' (length=6)
'seconds' => string 'second' (length=6)
'n' => string 'newton' (length=6)
'newtons' => string 'newton' (length=6)
'v' => string 'volt' (length=4)
'speed' => string 'velocity' (length=8)
'\/' => string 'per' (length=3)
's2' => string 'secondsquare' (length=12)

テキストは次の関数を通過します。

$toreplace = array_keys($replacements);

foreach ($toreplace as $r){
    $text = preg_replace("/\b$r\b/u", $replacements[$r], $text);
}

ただし、私が期待するものと出力には違いがあります。

Expected Output : an airplane accelerates down runway at 3.20 meterpersecondsquare for 32.8 second until finally lifts off ground determine distance traveled before takeoff 

Function Output : an airplane accelerates down runway at 3.20 meterpers2 for 32.8 second until finally lifts off ground determine distance traveled before takeoff 

'meterpersecondsquare' を期待していて、'meterpers2' ('s2' は置換されていません) を取得し、'm' と '/' はそれらの値に置換されていることに注意してください。

m/s2 の代わりに m/s を入れると、正常に動作し、次のようになることに気付きました。

an airplane accelerates down runway at 3.20 meterpersecond for 32.8 second until finally lifts off ground determine distance traveled before takeoff 

したがって、問題は基本的にその s2 と一致しないことです。なぜそうなるのですか?

4

1 に答える 1