9

PHP の文字列の最初のコンマからすべて (コンマを含む) を削除したいと考えています。

例えば、

$print = "50 days,7 hours";

なるべき

50 days
4

6 に答える 6

34

1 つの方法を次に示します。

$print = preg_replace('/^([^,]*).*$/', '$1', $print);

別:

list($print) = explode(',', $print);

または:

$print = explode(',', $print)[0];
于 2009-07-15T13:30:23.150 に答える
12

これはあなたのために働くはずです:

$r = (strstr($print, ',') ? substr($print, 0, strpos($print, ',')) : $print);
# $r contains everything before the comma, and the entire string if no comma is present
于 2009-07-15T13:29:36.630 に答える
1

使用するstrstr()場合は、文字列にカンマが存在することを 100% 確認するか、false戻り値を処理できるようにする必要があります。true最初に出現するカンマの前のすべての文字にアクセスするには、3 番目のパラメーターを設定します。コンマがない場合、戻り値は になりますfalse

preg_replace()おそらく最も効率的ではありませんが、これは単一の関数呼び出しであり、コンマが見つからない場合、使用するパターンは文字列を変更しません。入力文字列に改行文字が含まれている可能性がある場合は、sパターン修飾子を使用して、ドット ( .) がこれらにも一致するようにします。

strtok()は使用する簡潔なツールですが、その名前は他の関数よりも表現力が低く/不可解であることがわかります (これはstrstr().false入力文字列の長さがありません。

を使用する場合はexplode()、php に複数の爆発を実行するように要求しないでください。この関数の良いところは、コンマが存在しない場合、文字列全体を返すことです。最初の要素がアクセスされる配列を生成するため、使用しないことexplode()を好みます。必要以上のデータを生成しないことを好みます。

sscanf()null合体演算子と同様に否定された文字クラスを使用する必要があるため、このタスクには少し不器用です。区切り文字がスペースの場合は使用できますが、長さがゼロの一致は作成されない%sため、null 合体演算子は引き続き必要です。sscanf()

コード: ( Demo ) (コンマがない場合はDemo ) (文字列が空の場合は Demo )

「50日、7時間」 「50日」 ""
strstr($print, ',', true) 「50日、7時間」 間違い 間違い
preg_replace('/,.*/', '', $print) 「50日、7時間」 「50日」 ""
strtok($print, ",") 「50日、7時間」 「50日」 間違い
explode(',', $print, 2)[0] 「50日、7時間」 「50日」 ""
sscanf($print, '%[^,]')[0] ?? $print 「50日、7時間」 「50日」 ""
于 2021-06-24T22:28:13.160 に答える