2014-07-13 3 views
0

나는 새로운 언어를 배우고 있으며 나는 aprox로 DB를 만들었습니다. 2500 단어 및 2500 단어의 예. 기본적으로 각 단어에 대한 사진을 보여주는 PHP/MySQL 웹 UI를 만들었습니다. 클릭하면 단어의 오디오가 재생됩니다. 단어가 나오는 모든 예제와 일치하는 팝업 창을 트리거하는 상황에 맞는 메뉴가 있습니다.정규식을 사용하여 단어의 접두사를 무시하면서 전체 단어를 일치

나는 REGEXP '[[:<:]]$word[[:>:]]'을 사용하고 있지만 필자가 단어에 몇 가지 접두어/접미사를 붙였습니다 (영어 접미사와 같은). 이 문제를 해결하기위한 한 가지 방법은 정규식이 여전히 단어와 일치하도록 문장이 시작되는 단어에 하이픈을 넣는 것입니다. 그러나이 방법이 언어가 철자를 처리하는 방법에 완전히 부합하지는 않습니다. 의미가 완전히 다르기 때문에 필터링하고 싶지 않은 단어 조합도 있습니다. 여기에 구체적인 내용이 없으면 일치 단어가 "WORD"이고 접두사와 접미사가 같은 문단을 사용하여 pre1, pre2 ... 및 suf1, suf2 ...과 필터하지 않으려는 항목이 있습니다. 예에서 xxx

1. Xxx xxx WORDsuf1 xxx xxx xxx. 
2. Xxx xxx WORDsuf2 xxx xxx xxx. 
3. Xxx xxx pre1WORDsuf1 xxx xxx xxx. 
4. Xxx xxx WORD xxx xxx xxx. 
5. Xxx xxx pre1WORD xxx xxx xxx. 
6. Xxx xxx pre2WORDxxx xxx xxx xxx. 
7. Xxx xxx xxxWORDxxx xxx xxx xxx. 
8. Xxx xxx pre1WORDxxxsuf1 xxx xxx xxx. 
9. Xxx xxx pre1xxxWORDsuf1 xxx xxx xxx. 
10. Xxx xxx xxxWORDxxx xxx xxx xxx. 

나는 1, 2, 3, 4, 5 일치하고 싶지만 난 그냥 추가 OR 절을 시작, 6, 7, 8, 9 일치 (10)를 원하지 않는 이상 예를 들면 다음과 같습니다.

REGEXP '[[:<:]$word[[:>:]]|[[:<:]]$word$suffix[[:>:]]' 

이 예외는 하나의 예외에는 문제가 없지만 여러 예외가 있으면 문제가됩니다.

나는 틀림없이 정규 표현식에 익숙하지 않은데, 내가 다룰 수있는 대부분의 것들은 내가 읽어야 할 간단한 예제들이다. 짧고 효율적인 정규 표현식으로이 작업을 수행 할 수 있습니까?

+0

'pre1WORDsuf2'이 (가) 유효한 일치입니까? – Braj

+0

예 pre1WORDsuf2가 일치합니다. 기본적으로 나는 접두사와 접미사의 목록을 무시할 필요가 있으며 루트에 추가 된 유일한 것들이므로 모든 조합이 일치합니다. – user3787683

+0

답변과 데모를보십시오. – Braj

답변

1

이게 뭡니까?

(\b(pre1|pre2)?WORD(suf1|suf2)?\b) 

Online demo

일치 1

(.*(\b(pre1|pre2)?WORD(suf1|suf2)?\b).*) 

Online demo

사용 preg_match_all에를 다음 정규식 아래 시도하고 인덱스에 일치하는 그룹에서 경우 얻을 당신이 전체 라인을 찾는 경우 일치하는 모든 그룹을 얻으십시오.

+1

위대한 작품 덕분에. 단, mysql의 단어 경계는 다릅니다. 내가 사용 : REGEXP '[[: <:]] (pre1 | pre2)? 단어 (suf1 | suf2)? [[:> :]]' – user3787683

+0

PHP에 대해 잘 모르겠다. 무늬. [방문] (http : // stackoverflow/tour) – Braj

관련 문제