2017-08-28 70 views
2

我首先需要的三個點後提取字符串(例如YYYY在下面的模式)中提取的字符串:xxx.xxx.xxxx.yyyy 這裏X可以是任何東西(不,字母或) YYYY可以信函或nos或abc。或ABCJava正則表達式經過特殊字符

使用Java模式 「^.*\\.([^.]+)$」,它工作正常字符串ab.bc.de.ef: 代碼:

static final String REC_PATTERN = "^.*\\.([^.]+)$"; 
Pattern pattern = Pattern.compile(REC_PATTERN); 
Matcher m = pattern.matcher("ab.bc.de.ef"); 
System.out.println(m.group(1)) //out put ef. 

,但它失敗了ab.bc.cd.de.11111,我需要爲德輸出。 1111而不是1111. 有人可以幫助相關的正則表達式嗎?

回答

2

你可以試試這個模式:^(?:\w+\.){3}(.*)$,爲String"^(?:\\w+\\.){3}(.*)$"

它之前發現的3個點,其文字,捕捉下一步是什麼

你也可能忘記m.find(),沒有它母鹿不行


0

您可以使用:

str = str.replaceFirst("^(?:[^.]*\\.){3}", ""); 

RegEx Demo

這裏^(?:[^.]*\\.){3}將匹配3一部分後跟點在字符串的開始,當我們更換通過""它留下你想要的部分輸出。

+0

感謝@anubhava,我不能,因爲我需要的正則表達式來解決它使用上面的代碼中,由於相關的代碼是可用圖書館。 – RGoyal

+0

上面發佈的是基於100%正則表達式的解決方案。 – anubhava

0

它需要是一個正則表達式嗎?由於這個問題看起來像它可以通過一個簡單的String.split()來解決:

String text = "ab.bc.de.ef.1234"; 
String match = text.split(".")[4]; 
+1

第二行不應該是'text.split(「\\。」,4)[3];'? 'String.split()'函數將一個正則表達式作爲第一個參數,OP需要第四個結果,而不是第二個。來源:https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String,%20int) – nfs

+0

是的,我修正了它......但它不需要是一個正則表達式,對我來說它適用於「。」還有 – Piwo

+0

@Piwo,是的,它需要使用正則表達式來解決,因爲上面的代碼將ID分割爲第三方庫。只有改變我能做的就是提供reg-ex。 – RGoyal