2014-09-20 1 views
1

달성하고자하는 논리를 정리해 보겠습니다.PHP preg_match_all : "@word"또는 "#word"가 포함 된 문자열 찾기

  1. 는 내가 정기적으로 명시 통해 의견의 주제 단어를 일치시킬 DB
  2. 많은 의견과 주제 단어가 있습니다.
  3. 일치하는 단어는 DB에서 쿼리되어 topicid를 가져 와서 태그 클라우드 생성 목적으로 주석에 주제를 적용합니다.

하지만 " @"와 예에 대한으로, preg_match_all 패턴 "#"점점하지 않는 작업로 시작하는 방법 단어.

$pattern = '/\b(\@abdulcollo|tuskys|\#teamBata|50\% off|baby|\@mystic_false)\b/i'; 

$string = 'Anga lonely everyday RT @Mystic_False: Heehe @AbdulCollo aneno ka idhi tuskys in lonely bana #TeamBata in Kakamega baby! @danaceda @kibalimoreithi @olivermathenge @batakenya @ Tuskys Mega Mall 50% off'; 

prag_match_all($pattern, $string, $matches); 

var_dump ($ matched)는 배열 아래로 반환됩니다.

$matches = array('tuskys', 'baby', '50% off'); 

그러나 나는 또한 '@abdulcollo', '#TeamBata'는는 '@Mystic_False', 나는 탈출했다 "@"와 "#"하지만 여전히 그들은 점점되지 않습니다 을하고 싶어 일치 ...!

많은 도움을 주셨습니다. Pure PHP에 대한 논리를 원합니다.

참고 : 태그 단어에 대한 패턴도 낮은 전체 설명 문자열을 만들 때 내가 예에 대한 모든 것을 소문자 단어를 소문자, 그래서 이것은 어떤 문제가되지 않습니다.

답변

0

워드 경계 \b 때문입니다. 비 단어 문자와 비 단어 문자 사이에 단어 경계가 존재하지 않습니다. 그래서 정규식에,

(?:\b|\B)(@abdulcollo|tuskys|#teamBata|50% off|baby|@mystic_false)\b 
을 변경

DEMO

+0

덕분에 내가 그냥 제거 다른 수정을하고있다 Avinash ** \ B ** 내 정규 표현식에서'(@abdulcollo | tuskys | #teamBata | 50 % off | baby | @mystic_false)'지금 잘 작동하고 있습니다. –