2013-10-21 12 views
1

我正在尋找一種PCRE正則表達式匹配模式,可以使用它在C語言中提取字符串的尾部碎片。我的預期效果是提取字符串「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'。所需的結果是空字符串。 –