1

私はphpが初めてで、手を必要としています。単一の文字列 (x高さ) に出力される幅と高さの寸法があります。幅と高さを分ける必要があります。ディメンションは常に 100 未満ですが、小数値が含まれる場合があります。寸法の前後に空白がある可能性もあります。

寸法の例を次に示します: 8x10、10x12、24.5x36.625

strpos と substr を使用してタスクを達成できると思いますが、正規表現の方が高速でしょうか? よりエレガント?より正確な?[補足質問: 正規表現を学ぶ良い方法は何ですか? おすすめの本やウェブサイトはありますか?]

$string=' 8.5x10';
$string=trim($string);
$x = stripos($string,'x');
$size1 = substr($string, 0, $x);
$size2 = substr($string, $x+1);
echo $size1 . '<br />';
echo $size2;
4

4 に答える 4

4
$string = '8.5x10';
list($width, $height) = explode('x',$string);
于 2012-06-21T07:11:46.340 に答える
1

インターネットには正規表現に関するチュートリアルがたくさんありますが、さまざまなファミリ (perl、古い学校の UNIX...) が存在するため、少し注意する必要があります。

あなたの問題に関してsubsttringは、正規表現がかなり複雑になる可能性がある有限状態マシンに変換されるため、ソリューションはおそらく高速になります...

フォーマットが大まかに定義されている場合は、(プログラマーの観点から)フォーマットをすばやく定義し、それをチェックしてデータを取得できるため、適切です。

あなたの場合:(\d+(\.\d*)?)x(\d+(\.\d*))

  • \d: 一桁に一致
  • +前のブロックが 1 回以上出現する
  • *前のブロックが 0 回または 1 回または複数回出現する
  • ?前のブロックが 0 回または 1 回出現する
  • ()ブロックを定義する

例: d+1、12、158 に一致します

ここで、正規表現がサブセットに一致できると考えてください: aaaa15x15aaaa は 15x15 と同じくらい簡単に解析できます。

正規表現を使用しないのは、「状況に応じた」解析が必要な場合です (例: 行の形式は以前の情報に依存します)。

お役に立てれば

于 2012-06-21T07:18:21.427 に答える
0

まず、すべての空白を取り除き、文字列を分割しますx。を使用list()すると、配列を個別の変数に簡単に分割できます。

$string = "1.23 x5 ";
$string = str_replace(" ", "", $string);
list($width, $height) = explode("x", $string);

値が実際に数値であることを確認するために、値を浮動小数点にキャストすることもできます。

$width = (float)$width;
$height = (float)$height;
于 2012-06-21T07:22:39.123 に答える
0
$string=' 8.5x10';
$array = explode('x',$String);
var_dump($array);

$array[0] => size1 になり、 $array[1] => size2 になります

于 2012-06-21T07:15:30.693 に答える