-2
A
回答
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
。
相關問題
- 1. Reg。表達式檢查字符串的第一個字母
- 2. 的正則表達式最後一個字符和字符串
- 3. x個字符後截斷字符串
- 4. 截斷字符串中的最後n個字符使用.format()
- 5. 正則表達式在截尾處截斷字符串
- 6. 截斷從最後一個字符串,直到一個字符在PHP
- 7. Perl正則表達式替換點後的最後一個匹配字符串
- 8. XTEXT:第一,在自定義字符串終端截斷最後一個字符
- 9. 如何截斷給定表達式的字符串使用boost
- 10. 一個字符串的最後3個字符的Ruby正則表達式
- 11. 正則表達式來獲得一個字符串的最後3個字符
- 12. 正則表達式,禁止點(。)作爲最後一個字符
- 13. 最後一個字符串與正則表達式不匹配
- 14. reg表達式檢查字符串的第一個字母是Android的
- 15. 正則表達式來截斷字符串
- 16. reg表達式的字符數
- 17. iPhone - 截斷字符串到最後四個
- 18. 截斷字符串
- 19. 截斷字符串
- 20. Java的正則表達式消除最後一個特定字符字符串
- 21. 正則表達式只分割最後一個空白字符的字符串
- 22. 正則表達式刪除字符串中的最後一個字符
- 23. 正則表達式返回字符串的最後一個字符? '
- 24. range.toString()截斷javascript鍵盤事件中的最後一個字符
- 25. Webkit截斷JSON訂閱源的最後一個字符
- 26. Android:TextView自動截斷並替換字符串的最後3個字符
- 27. 使用正則表達式或DOMDocument替換最後一個字符(字符串)
- 28. 合併兩個正則表達式來截斷字符串裏的單詞
- 29. 結合reg表達式和字符串的Javascript
- 30. 的WriteFile()截斷字符串
你嘗試過什麼嗎?提示:'[^。]'匹配anychar,但匹配一個點,'$'匹配輸入的末尾';)' – sp00m
當你的語言可以做到時,不要給任何正則表達式。你使用哪種語言? – Bobot
這是學習正則表達式的有用工具:[regexr](http://regexr.com) –