我只想知道哪一個將在php中strpos()/ stripos()或preg_match()函數快。這是快速的過程strpos()/ stripos()或preg_match()在php
3
A
回答
3
我發現this blog已遇到關於你的問題有些睾丸,結果是:
- strpos()比的preg_match()
- stripos函數()快3-16倍2-30倍比strpos()
- stripos函數()比的preg_match()與 無殼改性劑快20-100%的慢 「// I」
- 使用的preg_match()正則表達式是不大於使用 長更快字符串
- 使用UTF8修飾語 「// U」 中的preg_match()使得2倍慢
的代碼所用的是:
<?php
function loop(){
$str_50 = str_repeat('a', 50).str_repeat('b', 50);
$str_100 = str_repeat('a', 100).str_repeat('b', 100);
$str_500 = str_repeat('a', 250).str_repeat('b', 250);
$str_1k = str_repeat('a', 1024).str_repeat('b', 1024);
$str_10k = str_repeat('a', 10240).str_repeat('b', 1024);
$str_100k = str_repeat('a', 102400).str_repeat('b', 1024);
$str_500k = str_repeat('a', 1024*500).str_repeat('b', 1024);
$str_1m = str_repeat('a', 1024*1024).str_repeat('b', 1024);
$b = 'b';
$b_10 = str_repeat('b', 10);
$b_100 = str_repeat('b', 100);
$b_1k = str_repeat('b', 1024);
echo str_replace(',', "\t", ',strpos,preg,preg U,preg S,preg regex,stripos,preg u,'.
'preg i,preg u i,preg i regex,stripos uc,preg i uc,preg i uc regex').PHP_EOL;
foreach (array($b, $b_10, $b_100, $b_1k) as $needle) {
foreach (array($str_50, $str_100, $str_500, $str_1k, $str_10k,
$str_100k, $str_500k, $str_1m) as $str) {
echo strlen($needle).'/'.strlen($str);
$start = mt();
for ($i=0; $i<25000; $i++) $j = strpos($str, $needle); // strpos
echo "\t".mt($start);
$regex = '!'.$needle.'!';
$start = mt();
for ($i=0; $i<25000; $i++) $j = preg_match($regex, $str); // preg
echo "\t".mt($start);
$regex = '!'.$needle.'!U';
$start = mt();
for ($i=0; $i<25000; $i++) $j = preg_match($regex, $str); // preg Ungreedy
echo "\t".mt($start);
$regex = '!'.$needle.'!S';
$start = mt();
for ($i=0; $i<25000; $i++) $j = preg_match($regex, $str); // preg extra analysiS
echo "\t".mt($start);
$regex = "!b{".strlen($needle)."}!";
$start = mt();
for ($i=0; $i<25000; $i++) $j = preg_match($regex, $str); // preg regex
echo "\t".mt($start);
$start = mt();
for ($i=0; $i<25000; $i++) $j = stripos($str, $needle); // stripos
echo "\t".mt($start);
$regex = '!'.$needle.'!u';
$start = mt();
for ($i=0; $i<25000; $i++) $j = preg_match($regex, $str); // preg utf-8
echo "\t".mt($start);
$regex = '!'.$needle.'!i';
$start = mt();
for ($i=0; $i<25000; $i++) $j = preg_match($regex, $str); // preg i
echo "\t".mt($start);
$regex = '!'.$needle.'!ui';
$start = mt();
for ($i=0; $i<25000; $i++) $j = preg_match($regex, $str); // preg i utf-8
echo "\t".mt($start);
$regex = "!b{".strlen($needle)."}!i";
$start = mt();
for ($i=0; $i<25000; $i++) $j = preg_match($regex, $str); // preg i regex
echo "\t".mt($start);
echo PHP_EOL;
}
echo PHP_EOL;
}
}
function mt($start=null){
if ($start === null) return microtime(true);
return number_format(microtime(true)-$start, 4);
}
loop();
0
標杆管理是一項棘手的業務,但可以說preg_match
比strpos
或stripos
要慢。這是因爲PRCE功能實現的REGEX引擎是,其中比字符串函數更強大和更靈活。
他們也做不同的事情。 strpos
會告訴你另一個字符串內字符串的開始索引,而preg_match
主要用於探測字符串的格式,並根據正則表達式檢索字符串的部分。
總之,如果您只是想在另一個字符串中查找字符串,請使用strpos
或stripos
。
1
preg_match
是三者中最慢的。 stripos
將比strpos
慢,因爲它將不得不做額外的工作來處理不區分大小寫的匹配。
相關問題
- 1. preg_match()或stripos()?
- 2. strpos或pregmatch所有在PHP vs MariaDB LIKE或IN查詢,這是快?
- 3. 這是快速URLConnection或套接字
- 4. PHP stristr與stripos
- 5. preg_match for。 /或\在PHP
- 6. PHP,Zend Framework快速入門教程:這是如何工作的?
- 7. 在邏輯過濾中使用PHP stripos()
- 8. 我在做什麼錯? strpos,strlen和preg_match
- 9. 如何使用strpos()insted的的preg_match()的
- 10. PHP:這是什麼模式? (的preg_match)
- 11. 什麼是strpos和or stripos的正確使用方法? (這是一個錯誤嗎?)
- 12. strpos/stripos函數(嚴格的比較)未能
- 13. MySQL的插入速度比PHP更快,這是預期的嗎?
- 14. PHP - Strpos在陣列
- 15. 如何SUBSTR或strpos這個角色
- 16. PHP使用Stripos和array_push
- 17. 這是什麼呢,的preg_match
- 18. 的preg_match():在PHP
- 19. 匹配通過PHP的preg_match
- 20. 是通過值或引用快速傳遞的條件綁定?
- 21. 在PHP中Strpos的問題
- 22. 通過ZipArchive快速解壓比在php中使用exec()更快?
- 23. QSqlTableModel與QSqlQuery,這是快速(通過互聯網)?
- 24. PHP會話快速隨機過期
- 25. PHP - 快速通過圖像像素
- 26. 快速幫助。在PHP
- 27. php preg_match或preg_replace驗證
- 28. 在PHP中快速查詢相關內容的快速問題!
- 29. preg_match在PHP for「&$」
- 30. PHP strpos問題