2

PHP を使用して Java アプリを呼び出すと、Java アプリは "[....]" でカプセル化された文字列を返します。外側の角かっこを削除し、内部にあるもの (整数、文字列、その他の特殊文字の組み合わせ) を維持する必要があります (など..プロセスの後半でsscanfをうまく使用しているので、この特定のステップがなぜそれほど難しいのかについて少し迷っています。

入力:

 $str = [(123)[334.5 : 765.1] string]

機能しないコード:

$format = '[%s]';
sscanf($str,$format,$output);

プロセスの後半で、sscanf を使用して内部の文字列を解析することに成功しました。

$format = '(%d) [%f : %f] %s';

私はここで何か大きなものを見逃しています...

4

3 に答える 3

4

文字列が常に[...] で囲まれ、不適切な形式の文字列をチェックする必要がないと仮定すると、最初と最後の文字を単純に削除できます。

$str = substr($str, 1, -1);

編集: ltrim/rtrim は最初と最後の角かっこだけでなく、すべての先頭/末尾の角かっこを削除するため、trim() とその仲間を使用するよりも信頼性が高くなります。文字列に "[[value]..]" のようなものが含まれていると、これが問題になる可能性があります。"value].." が残ることになります。

別の編集:文字列が正しくフォーマットされているかどうかを確認する必要がある場合は、最初と最後の文字が角括弧であることを簡単に確認できます。

if ((substr($str, 0, 1) == '[') && (substr($str, -1) == ']')) {
    $str = substr($str, 1, -1);
} else {
    //Something went wrong - the string is not wrapped in [brackets].
}
于 2012-08-17T13:24:44.113 に答える
1

ltrim () およびrtrim () 関数を使用して、外部ブラケットを取り除くことができます。

$str = '[(123)[334.5 : 765.1] string]';
$str = ltrim($str, "[");
$str = rtrim($str, "]");
echo $str;
于 2012-08-17T13:24:14.987 に答える