2016-08-14 102 views
1

我使用preg_match_all來搜索字符串中的指定關鍵字,如果發現那麼,我會選擇關鍵字前後的幾個單詞。我使用下面preg_match_allPHP preg_match_all不返回所需的輸出

preg_match_all('~\b(?:[^ ]+){0,'.$prev.'}'.trim($keyword).'(?: [^ ]+){0,'.$next.'}\b~i',$text,$output); 

這裏$關鍵字是關鍵字,$上一頁和$下一個是代表很多的話需要如何挑選數字,$文本是一個主串和$輸出是合成陣列。所以,如果我的字符串低於

PROFIT & LOSS NOFORMING P 152 22. ADDITIONAL INFORMATION: A) AUDITORS REMUNERATION (EXCLUDING SERVICE TAX) (` in crores) ParticularsCurrent yearPrevious year As audit fees (including limited review) 3.45 2.42 

這裏的關鍵字是「審計費」,我得到所需的輸出,這樣

EXCLUDING SERVICE TAX) (` in crores) ParticularsCurrent yearPrevious year As audit fees (including limited review) 3.45 2.42 

但在下面的字符串,其中,如果我的關鍵字和下一個字都沒有它之間的空格只是返回該字符串之前的幾個單詞,而不是該關鍵字之後的下一個單詞。

PROFIT & LOSS NOFORMING P 152 22. ADDITIONAL INFORMATION: A) AUDITORS REMUNERATION (EXCLUDING SERVICE TAX) (` in crores) ParticularsCurrent yearPrevious year As audit fees(including limited review) 3.45 2.42 

它只是返回

EXCLUDING SERVICE TAX) (` in crores) ParticularsCurrent yearPrevious year As audit fees 

請指引我在這裏,如何讓接下來的話也如果我的關鍵字,它的下一個單詞有沒有空間在他們之間。

+0

https://www.regex101.com/r/wY6sP3/1 – splash58

+0

嘿@ splash58,偉大的工作的人,它的工作就像一個魅力, 謝謝。發佈你的答案,我會選擇一個正確的答案。 –

+0

@ChangezKhan:如果在關鍵字之前或之後的單詞之間有非空格,該怎麼辦? –

回答

1

如果你只擔心關鍵字後面的話,你需要確保你匹配空格字符(或無字字符),應該是可選的(零個或多個):

'~\b(?:\S+\s+){0,10}Audit Fees(?:\s*\S+){0,5}\b~' 

this regex demo

這將使關鍵字後面的非空白塊之間的空格可選(\s*匹配零個或多個空格)。

圖案的詳細資料

  • \b - 領先的單詞邊界
  • (?:\S+\s+){0,10} - 零到十1+非空格符號,接着用1+空格
  • Audit Fees - 字面關鍵字
  • (?:\s*\S+){0,5} - 零至五個0+空格符號,後跟1個非空白符號
  • \b - 尾字邊界

PHP demo

$prev = 10; 
$keyword = "Audit Fee"; 
$next = 5; 
$text= "PROFIT & LOSS NOFORMING P 152 22. ADDITIONAL INFORMATION: A) AUDITORS REMUNERATION (EXCLUDING SERVICE TAX) (` in crores) ParticularsCurrent yearPrevious year As audit fees(including limited review) 3.45 2.42"; 
$re = '~\b(?:\S+\s+){0,'.$prev.'}'.trim($keyword).'(?:\s*\S+){0,'.$next.'}\b~i'; 
preg_match_all($re,$text,$output); 
print_r($output); 
+1

那麼它也有效。謝謝。 –