3
A
回答
4
沒有,preg_match_all
結果集的計算不能是有限的。您只能array_slice
或array_splice
限制的結果之後(這可能需要PREG_SET_ORDER):
preg_match_all($pattern, $subject, $matches, PREG_SET_ORDER);
$firstMatches = array_slice($matches, 0, 20);
但除此之外,你不應該使用正則表達式反正解析HTML。雖然現代的正則表達式引擎不再是常規的,並且可以處理像HTML這樣的不規則語言,但它很容易出錯。更好地使用適當的HTML解析器,而不是像PHP’s DOM library之一那樣。然後,只需使用一個計數器只得到了20場比賽:
$doc = new DOMDocument();
$doc->loadHTML($code);
$counter = 20;
$matches = array();
foreach ($doc->getElementsByTagName('p') as $elem) {
if ($counter-- <= 0) {
break;
}
$matches[] = $elem;
}
3
$matches = array();
preg_match_all ($pattern , $subject , $matches);
$twenty = array_slice($matches , 0, 20);
3
只是匹配所有,切片結果數組:
$allMatches = array();
$numMatches = preg_match_all($pattern, $subject, $allMatches, PREG_SET_ORDER);
$limit = 20;
$limitedResults = $allMatches;
if($numMatches > $limit)
{
$limitedResults = array_slice($allMatches, 0, $limit);
}
// Use $limitedResults here
+0
乾杯朋友,這是我考慮過的方式。 – Franco 2010-12-17 11:22:15
0
我不這麼認爲,但preg_match確實有一個offset
參數,還有一個PREG_OFFSET_CAPTURE
標誌,這些標誌在組合時可用於獲得「下一個匹配」。
這是,如果你不想讓所有的結果主要是有用的,然後array_slice()
部分關閉:O)
編輯: 好吧,這裏是一些代碼(不是測試或以任何方式使用):
$offset = 0;
$matches = array();
for ($i = 0; $i < 20; $i++) {
$results = preg_match('/<p(?:.*?)>/', $string, PREG_OFFSET_CAPTURE, $offset);
if (empty($results)) {
break;
} else {
$matches[] = $results[0][0];
$offset += $results[0][1];
}
}
0
您可以使用preg_match_all()
並放棄您不感興趣的匹配,也可以使用preg_match()
的循環。如果您擔心掃描大字符串的費用,第二種選擇會更好。
該實施例限制到2點的匹配,當存在整個串中實際上是3:
<?php
$str = "ab1ab2ab3ab4c";
for ($offset = 0, $n = 0;
$n < 2 && preg_match('/b([0-9])/', $str, $matches, PREG_OFFSET_CAPTURE, $offset);
++$n, $offset = $matches[0][1] + 1) {
var_dump($matches);
}
真的一個while
環路可能早就比for
環上的反射更清晰;)
相關問題
- 1. PHP preg_match_all限制
- 2. imap_sort限制結果數量?
- 3. PHP fetch_row限制結果
- 4. PHP:我如何限制數組中結果的數量
- 5. SQLite3並限制結果數量
- 6. 限制ASP.NET ListView的結果數量
- 7. 限制json結果的數量 - Rails API
- 8. 限制Get-ChildItem結果的數量
- 9. 將分頁:結果數量限制
- 10. 使用計數限制查詢結果
- 11. preg_match_all沒有結果
- 12. php與preg_match_all()生成沒有結果
- 13. 使用PHP爆炸函數的限制結果
- 14. Laravel 4 PHP:使用分頁來限制數據庫結果
- 15. 使用preg_match_all結果preg_replace的問題
- 16. 限制結果
- 17. solr結果總數限制
- 18. 如何在php-imap上限制結果
- 19. preg_match_all顯示多個結果
- 20. preg_match_all給未知的結果
- 21. MySQL使用分組來限制結果
- 22. 使用AES限制加密結果
- 23. MySQL:使用Count來限制結果?
- 24. 限制使用結果聚合物
- 25. Teradata - 使用TOP限制結果
- 26. 在處理MySQL查詢結果時如何限制PHP內存使用量?
- 27. 限制SQL結果
- 28. 限制Twilio結果
- 29. 限制JSON結果
- 30. MYSQL限制結果
乾杯濃湯,這個DOM東西真的很有用。從來沒有嘗試過使用它,而不是使用reg ex ex,所以它會一試! – Franco 2010-12-17 11:21:40
@SiQ:請注意,* DOMDocument *按照W3C的規定實現了DOM,因此是相當廣泛的;如果你只需要讀取DOM,你也可以嘗試[* SimpleXML *](http://php.net/book.simplexml)。 – Gumbo 2010-12-17 11:24:52
您的DOMDocument解決方案在事實之後限制了代碼,不是嗎?它沒有設置限制,但忽略了它收集的額外標籤。 – bozdoz 2011-08-20 05:38:00