2016-04-26 89 views
-2

我有下面的字符串,我想從點開始去掉最後一個部分。您能否提一些建議?我是reg表達式的新手。 。 [ABC] [高清] [GHI]reg表達式截斷最後一個點的字符串

感謝, MC

+0

你嘗試過什麼嗎?提示:'[^。]'匹配anychar,但匹配一個點,'$'匹配輸入的末尾';)' – sp00m

+4

當你的語言可以做到時,不要給任何正則表達式。你使用哪種語言? – Bobot

+0

這是學習正則表達式的有用工具:[regexr](http://regexr.com) –

回答

0

regexp你需要的是:

(.*?)(?:\.[^.]*)?$ 

regexp一塊一塊:

(   # start of the first capturing sub-pattern 
    .*  # matches any character, any number of times (zero or more) 
    ?  # make the previous quantifier (`*`) not greedy 
)   # end of the first sub-pattern 
(?:  # start of the second sub-pattern; it doesn't capture the matching string 
    \.  # matches a dot (.) 
    [^.]* # matches anything but a dot (.), any number of times (zero or more) 
)   # end of the second sub-pattern 
?   # the previous sub-expression (the non-capturing sub-pattern) is optional 
$   # matches the end of the string 

工作原理:

第一部分(.*?)匹配並捕獲所有內容直到最後一個點。問號(?)使得零個或多個量詞(*)不會貪婪。它默認情況下是貪婪的,由於第二個子表達式必須是可選的(見下面),它的貪婪使它匹配整個字符串。

在第二個子模式開始處的?:說明符使其無法捕獲。它所匹配的子字符串不會被存儲,並且不可用於其他用途。

第二個子圖案包含\.[^.]*,並匹配一個點(.),後跟零個或多個字符,但它們都不能是點。它不匹配任何東西,如果輸入字符串不包含點,這使得整個regexp不匹配。這就是爲什麼它被標記爲可選的,因爲它帶有問號(?)。

regexp一起使用的大多數工具提供了一種獲取和使用捕獲的字符串的方法,使用$n\n作爲替換字符串中的佔位符。上面的n是捕獲模式的數量,通過其左括號(計數。由於我們只有一個捕獲子模式,因此匹配的子字符串應該可以是$1\1(或兩者都可用,或使用不同的語法)。

你可以在regex101.com上玩regexp

相關問題