第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Preg_match_all() - 正則表達式太大

Preg_match_all() - 正則表達式太大

PHP
慕慕森 2022-07-09 16:30:56
我怎樣才能改進以下preg_match_all模式,所以我沒有這個警告:preg_match_all():編譯失?。赫齽t表達式在偏移量 32036 處太大    $sql = "SELECT skills FROM weighted_skills_industry     WHERE industry = 'Engineering' ORDER by LENGTH(skills) DESC LIMIT 3000";    $result = $con->query($sql);     while($row = $result->fetch_assoc()) {         $skill[] = $row['skills'];      }        $pattern = '~(?<![\w-])(?:' . implode('|', array_map(function($i) { return preg_quote($i, '~'); }, $skill)) . ')(?![\w-])~i';        if (preg_match_all($pattern, $text, $matchWords)) {          //write something        }
查看完整描述

2 回答

?
慕萊塢森

TA貢獻1810條經(jīng)驗 獲得超4個贊

我可能會改用以下查詢:


SELECT skills

FROM weighted_skills_industry 

WHERE

    industry = 'Engineering' AND

    skills REGEXP CONCAT('[[:<:]]', ?, '[[:>:]]')

ORDER BY

    LENGTH(skills) DESC

LIMIT 3000;

對于?占位符,您可以綁定$textPHP 代碼中的變量。上述邏輯將返回文本中可以找到的所有技能。


查看完整回答
反對 回復 2022-07-09
?
郎朗坤

TA貢獻1921條經(jīng)驗 獲得超9個贊

如果我理解正確,您將從數(shù)據(jù)庫中獲取技能列表(作為關鍵字數(shù)組),并希望檢查字符串是否$text包含這些單詞中的任何一個。


您現(xiàn)在使用的可能是要走的路,但我懷疑如果您有數(shù)千個這樣的單詞,您是否可以縮短正則表達式。


您可以簡單地遍歷關鍵字并對每個關鍵字執(zhí)行正則表達式檢查。這有點慢,但只要找到任何單詞(如果需要),您就可以打破循環(huán):


foreach ($skills as $skill) {

  if (preg_match('~(?<![\w-])(?:' . preg_quote($skill, '~') . ')(?![\w-])~i', $text, $matches)) {

    // do stuff with $matches[0] (found keyword)

    // ...

    break; // <- if finding one of these words is enough

  }

}

請注意,您還可以\b在正則表達式中使用來檢查單詞邊界??紤]:


\bword\b

代替:


(?<![\w-])word(?![\w-])

或者,有一些方法可以增加模式大小限制,但您必須重新編譯 PHP。


查看完整回答
反對 回復 2022-07-09
  • 2 回答
  • 0 關注
  • 117 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號