ホームページ  >  記事  >  バックエンド開発  >  [PHPソースコードの読み方] strpos、strstrとstripos、stristr関数、strposstristr_PHPチュートリアル

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

WBOY
WBOYオリジナル
2016-07-12 08:52:551252ブラウズ

【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 までご連絡ください。