ホームページ > バックエンド開発 > PHPチュートリアル > PHPのexplode()を使用するときに引用符で囲まれたテキストを単一の単語として保存する方法は?

PHPのexplode()を使用するときに引用符で囲まれたテキストを単一の単語として保存する方法は?

Mary-Kate Olsen
リリース: 2024-12-07 13:01:12
オリジナル
432 人が閲覧しました

How to Preserve Quoted Text as Single Words When Using PHP's explode()?

PHP で引用符で囲まれた単語を単一の単語として扱うexplode

以下に示すように、explode() を使用して文字列を分解するにはどうすればよいですか?引用されたテキストを単一の単語として保持しますか?

Lorem ipsum "dolor sit amet" consectetur "adipiscing elit" dolor
ログイン後にコピー

期待されています出力:

["Lorem", "ipsum", "dolor sit amet", "consectetur", "adipiscing elit", "dolor"]
ログイン後にコピー

次のコードを使用しようとしても、現在の実装では文字列内の各単語がセグメント化されます:

$mytext = "Lorem ipsum %22dolor sit amet%22 consectetur %22adipiscing elit%22 dolor"
$noquotes = str_replace("%22", "", $mytext");
$newarray = explode(" ", $noquotes);
ログイン後にコピー

解決策:

引用された単語を単一の実体として正確に取得するには、次のことを活用できます。 preg_match_all():

$text = 'Lorem ipsum "dolor sit amet" consectetur "adipiscing \"elit" dolor';
preg_match_all('/"(?:\\.|[^\\"])*"|\S+/', $text, $matches);
print_r($matches);
ログイン後にコピー

この洗練された構文は、引用符で囲まれたフレーズ内のエスケープされた引用符も処理します。

正規表現の内訳:

"(?:         # Start non-capture group 1
  \        #   Match backslash character
  .         #   Match any character except line breaks
  |         #   Or
  [^\"]    #   Match any character except backslash and double quotes
)*          # End non-capture group 1 and repeat it zero or more times
"           # Match double quotes
|           # Or
\S+         # Match one or more non-whitespace characters
ログイン後にコピー

Double の代わりに「」を処理する引用符:

二重引用符の代わりに " を処理する必要がある場合は、次の調整された正規表現を使用します:

preg_match_all('/%22(?:\\.|(?!%22).)*%22|\S+/', $text, $matches);
ログイン後にコピー

以上がPHPのexplode()を使用するときに引用符で囲まれたテキストを単一の単語として保存する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート