2016-08-14 5 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 

를 반환하고 그 다음 단어 사이에 공백이 없습니다입니다.

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

참조 : 당신은 단지 키워드 뒤의 단어에 대해 고민하는 경우에

+0

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

+0

헤이 @ splash58 위대한 작품 남자, 그것이 마치 마법처럼 일했다 , 고맙습니다. 답을 게시하십시오. 올바른 답을 선택하겠습니다. –

+0

@ChangezKhan : 키워드 앞뒤에 단어 사이에 공백이 있으면 어떨까요? –

답변

1

, 당신은 (0 개 이상) 선택해야 당신이 공백 문자 (또는 비 단어 문자)를 일치하는지 확인해야합니다 this regex demo

이렇게하면 키워드가 선택적 (\s*이 0 개 이상의 공백과 일치 함) 이후에 공백이 아닌 청크 사이의 공백을 허용합니다.

패턴 자세한 사항 :

  • \b - 주요 단어 경계
  • (?:\S+\s+){0,10} - 제로 10 1+ 공백이 아닌 기호 1+ 공백
  • Audit Fees
  • 뒤를 - 문자 키워드
  • (?:\s*\S+){0,5} 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

그럼에도 효과가있었습니다. 감사. –