2012-06-03 2 views
3

메신저로 PHP와 정규식으로 간단한 단어 게임을 만들 때 문자열에 두 개 이상의 단어가 필요한 경우 어떻게 검색 할 수 있습니까?문자열에 모든 단어 또는 조건이 포함되어있는 경우

"cat" 
"dog" 
"play" x 2 

"고양이 강아지 플레이 플레이"패스

"안녕하세요 연극을 재생 고양이 개는"을 통과하지 않을 경우에만 1 "놀이"말할 수

"cat", 할 수 없음 g 및 2 배

을 재생이

어떻게 우리가 정규식과 일치 할 수

패스 "나는 고양이와 개가 나와 함께 플레이와 할아버지와 함께 재생 싶어"?

+0

3 개 정규식 대신 하나의 정규식으로 해결하지 않으시겠습니까? 훨씬 쉬울 것입니다. 나는 그것이 하나일지도 모른다고 의심한다. – JohnB

+0

예'if (preg_match ("dog") && preg_match ("etc") && ...)'와 같은 것을 할 수 있지만 성능에 영향을 미칩니 까? 내가 많은 것들과 일치한다면? –

+0

가능한 복제본 : http://stackoverflow.com/questions/10832519/regex-match-at-least-two-search-terms –

답변

5

보십시오 당신이 찾고있는 정규식은 다음과 같습니다

/(?=.*?\bcat\b)(?=.*?\bdog\b)(?=(.*?\bplay\b){2})^.*$/ 

설명 : 나는 단어 cat, dogplay (2 회) 임의의 순서로 텍스트에 나타날 수 있다고 생각하지만, 자격을 갖추려면 모두 문장에 있어야합니다. 위 정규식은 위 조건의 존재를 확인하기 위해 긍정적 인 선견자를 사용합니다.

Here is the online working demo of above RegEx

2

preg_match_all(/cat.+dog(.+play){2}/i,$str,$out);

+0

상당히 제한되어 있습니다. 단어를 올바른 순서로 작성해야합니다. – zessx

+0

올바른 순서가 아니라면 어떻습니까? 어쨌든 그것도 같은 순서로 작동하지 않습니다. 아마/내가? 기다려주세요. 무엇이'/ i'인지 검색하겠습니다. –

+0

죄송합니다, 마지막 예를 보지 못했습니다. 나는 대답을 업데이트했다. 그리고/i는 대소 문자를 구별하지 않는다는 것을 의미합니다. –

관련 문제