目次
【PHPソースコード読み込み】strpos、strstrとstripos、stristr関数、strposstristr
strpos
strposコアソースコード
検索機能
干し草の山で最初に出現した針から最後までの文字列を返します。
strstr 関数の前半は strpos と似ていますが、異なる点は、strstr 関数が位置を見つけた後、干し草の山部分の文字列を返す必要があることです。
大文字と小文字を区別しない strpos。実装方法は以下と同様で、主にコピーを使用し、比較対象の文字列を小文字に変換してから検索します。
大文字と小文字を区別しない strstr。
found が
strpos/striposは位置を返すのですが、位置は0から計算されるため、検索失敗の判定には
ホームページ バックエンド開発 PHPチュートリアル [PHPソースコードの読み方] strpos、strstrとstripos、stristr関数、strposstristr_PHPチュートリアル

[PHPソースコードの読み方] strpos、strstrとstripos、stristr関数、strposstristr_PHPチュートリアル

Jul 12, 2016 am 08:52 AM

【PHPソースコード読み込み】strpos、strstrとstripos、stristr関数、strposstristr

strpos

リーリー

オフセットを指定した場合はオフセット位置から検索を開始します。オフセットを負の値にすることはできません。

干し草の山で針が最初に現れた場所に戻ります。干し草の山で針が見つからない場合は FALSE を返します。

needle、needle が文字列でない場合、整数値に変換され、その値の ASCII 文字が割り当てられます。以下の例を参照してください。

リーリー

strposコアソースコード

リーリー

注意すべき点は、needle が文字列でない場合、php_needle_char 関数が呼び出され、needle を整数とその ASCII 値に変換することです。

検索機能

関数は最終的に found を返し、php_memnstr 関数は検索メソッドを実装します。それでは、続行して php_memnstr 関数が何をするのか見てみましょう:

リーリー

php_memnstr は、関数 zend_memnstr のマクロ定義です。zend_memnstr 関数を次のように表示します。 リーリー

最初の最適化は、(char *)memchr(p, *needle, (end-p+1) が end - neede_len + 1 (つまり、haystack_len+1) で検索されるためです。p が空の場合、それは、針の th A 文字は p に登場しません。

strstr

リーリー

干し草の山で最初に出現した針から最後までの文字列を返します。

この関数では大文字と小文字が区別されます。

干し草の山に針が存在しない場合は、FALSE を返します。

before_needle が true の場合、needle が初めて haystack に表示される前に、haystack 内の文字列を返します。

strstrコアソースコード

リーリー

strstr 関数の前半は strpos と似ていますが、異なる点は、strstr 関数が位置を見つけた後、干し草の山部分の文字列を返す必要があることです。

part

変数は、strstr 関数を呼び出すときに渡される before_needle 変数です。 ストライポ

リーリー

大文字と小文字を区別しない strpos。実装方法は以下と同様で、主にコピーを使用し、比較対象の文字列を小文字に変換してから検索します。

ストリスト

リーリー

大文字と小文字を区別しない strstr。

コアソースコード

リーリー

found が

php_stristr

から取得されたことがわかります。引き続き php_stristr 関数を確認してください: リーリー この関数の機能は、文字列を小文字に変換し、php_mennstr 関数を呼び出して、haystack 内で針が最初に出現する位置を見つけることです。

まとめ

strpos/striposは位置を返すのですが、位置は0から計算されるため、検索失敗の判定には

=== FALSE

を使用する方が適しています。 PHP のソース コードを読むことで得られることはたくさんあります。一方で、特定の関数の具体的な実装原理を知ることができ、他方では、プログラミングの最適化ソリューションを学ぶことができます。

この記事はこれで終わりです。まだ質問や提案がある場合は、オリジナルの記事です。記事に間違いがある場合は、ご連絡ください。お知らせ下さい。

この記事が役に立った場合は、クリックしておすすめしてください、ありがとうございます^_^

http://www.bkjia.com/PHPjc/1125523.html

本当http://www.bkjia.com/PHPjc/1125523.html技術記事 【PHPソースコード読み込み】 strpos、strstrとstripos、stristr関数、strposstristr strposmixed strpos ( string $haystack ,mixed $needle [, int $offset = 0 ] ) offset指定の場合は検索…
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPでint型をstringに変換する方法を詳しく解説 PHPでint型をstringに変換する方法を詳しく解説 Mar 26, 2024 am 11:45 AM

PHPでint型をstringに変換する方法を詳しく解説

Golang 文字列が指定された文字で終わるかどうかを判断する方法 Golang 文字列が指定された文字で終わるかどうかを判断する方法 Mar 12, 2024 pm 04:48 PM

Golang 文字列が指定された文字で終わるかどうかを判断する方法

Golang で文字列が特定の文字で始まるかどうかを確認するにはどうすればよいですか? Golang で文字列が特定の文字で始まるかどうかを確認するにはどうすればよいですか? Mar 12, 2024 pm 09:42 PM

Golang で文字列が特定の文字で始まるかどうかを確認するにはどうすればよいですか?

python_python の繰り返し文字列チュートリアルで文字列を繰り返す方法 python_python の繰り返し文字列チュートリアルで文字列を繰り返す方法 Apr 02, 2024 pm 03:58 PM

python_python の繰り返し文字列チュートリアルで文字列を繰り返す方法

PHPで16進数を文字列に変換するときに中国語が文字化けする問題を解決する方法 PHPで16進数を文字列に変換するときに中国語が文字化けする問題を解決する方法 Mar 04, 2024 am 09:36 AM

PHPで16進数を文字列に変換するときに中国語が文字化けする問題を解決する方法

PHP 文字列操作: スペースを効果的に削除する実用的な方法 PHP 文字列操作: スペースを効果的に削除する実用的な方法 Mar 24, 2024 am 11:45 AM

PHP 文字列操作: スペースを効果的に削除する実用的な方法

PHP 文字列マッチングのヒント: あいまいな組み込み式を避ける PHP 文字列マッチングのヒント: あいまいな組み込み式を避ける Feb 29, 2024 am 08:06 AM

PHP 文字列マッチングのヒント: あいまいな組み込み式を避ける

文字列の最後の 2 文字を削除するための PHP テクニック 文字列の最後の 2 文字を削除するための PHP テクニック Mar 23, 2024 pm 12:18 PM

文字列の最後の 2 文字を削除するための PHP テクニック

See all articles