2014-05-10 2 views
0

나는이 예를 들어 문자열이 문자 google-chrome을 캡처하는 정규 표현식. 입력 문자열에 download--free 접두사와 접미어가없는 경우 캡처 된 그룹은 문자열 자체입니다.정규식 부의 접두사 및 접미사

문자열 1 = 다운로드 - 구글 크롬 프리 (접두사와 sufix와)

String 1 Group 1 = download- 
String 1 Group 2 = google-chrome 
String 1 Group 3 = -free 

문자열 2 = 구글 크롬을 당신이

String 2 Group 1 = '' (empty) 
String 2 Group 2 = google-chrome (empty) 
String 2 Group 3 = '' (empty) 

할 수 있습니다 (접두사와 sufix없이) ? preg_match을 사용하여 PHP을 사용하고 있습니다.

+2

어설 션은 http://www.regular-expressions.info/lookaround.html을 참조하십시오. – mario

+1

시도해 볼 수 있습니다. '$ a = "google-chrome-free"; –

답변

1
preg_match('/(download-)?(google-chrome|mozilla-firefox)(-free)?/', $string, $match); 

?은 이전 그룹이 선택 사항임을 나타냅니다. 접두사 또는 접미사가 문자열에 없으면 해당 캡처 그룹은 $match에서 비어 있습니다.

실제로, 옵션 접두사와 접미사로 그룹을 반환 할 그룹의 시작 부분에 ?:을 넣어 그들에게 그룹을 비 캡처하지 않는 경우 :

preg_match('/(?:download-)?(google-chrome|mozilla-firefox)(?:-free)?/', $string, $match); 

지금 $match[1]이 포함됩니다 원하는 브라우저 이름.

+0

preg_match ("/ (? : \ w + -)? (\ : \ w +)? /", $ a, $ match); ]는 그가 원하는 것을 포착 할 것입니다. [1]은 "다운로드"입니다 –

+0

그는 그의 예에 따라 3 명 모두를 원합니다. – Barmar

+1

그래서 나는 그것을 오해했습니다 - "** google-chrome **이라는 단어를 포착하려면 정규식이 필요합니다. ** 입력 문자열 **에 다운로드 및 프리픽스 ** 및 접미사 **가없는 경우 캡처 된 그룹은 문자열입니다 그 자체." –

관련 문제