2013-10-21 4 views
1

문자열의 꼬리 조각을 추출하기 위해 C 언어로 사용할 수있는 PCRE 정규식 일치 패턴을 찾고 있습니다. 내 기대 효과는 "en"문자열 바로 뒤에 아무 것도없고 슬래시 ("/")의 유무와 상관없이 문자열을 추출하는 것입니다. "en"다음의 첫 번째 문자가 슬래시 인 경우 캡처 된 문자열을 반환하기 전에 무시하거나 잘라냅니다. 입력 문자는 소문자로 된 순수 ASCII입니다. PCRE를 사용하여 문자열에서 꼬리 추출하기

input-string  match captured-string 
--------------------------------------- 
english/japan  no 
en     yes 
en/     yes 
en/japan   yes  japan 
en//japan   yes  japan 
en/japan/tokyo  yes  japan/tokyo 
en//japan/tokyo  yes  japan/tokyo 
en//    yes 

사전에 감사합니다!

답변

0
echo "en//japan/tokyo" | sed -rn 's;^en($|/+(.*));\2;p' 
+0

난 그냥 테스트 한'엉 /*(.*)'나는 할 수 없을 것 같다 http://www.freeformatter.com/regex-tester.html을에 그것으로부터 올바른 결과를 얻으십시오. 입력 문자열'english/japan/tokyo'는 일치하지 않아야하지만, 캡처 된 문자열'glish/japan/tokyo'와 일치합니다. –

+0

방금 ​​일부 오류를 수정하기 위해 내 대답을 편집했습니다. –

+0

직관적 인 제공에 감사드립니다! –

1

^en(?:/+(.+)|/?)$

^ #beginning of line 
    en #'en' literal 
    (?: #beginning of a not capturing group 
    /+(.+) #'/' one or more times + 'any' character one or more times (capturing group) 
    | # OR 
    /? #'/' zero or one time  
    ) #closing not capturing group 
$ #end of line 
+0

직관적 인 설명에 감사드립니다! 나는 캡쳐 된 문자열에서'/'의 앞뒤가 잘린 것을 제거해야한다고 언급 했어야했다. $ en (? :/+ (. +) | /?) $'은 입력 된'en //'또는'en ///'이 주어지면 처음 캡처 된 그룹'$ 1'을'/'로 포착합니다. 원하는 결과는 빈 문자열입니다. –

관련 문제