我不習慣他們,並與Java語法「匹配」的麻煩。多個正則表達式
我有兩個文件一個是111.123.399.555.xml
另一種是Conf.xml.
現在我只希望得到使用正則表達式的第一個文件。
string.matches("[1-9[xml[.]]]");
沒有用。
如何做到這一點?
我不習慣他們,並與Java語法「匹配」的麻煩。多個正則表達式
我有兩個文件一個是111.123.399.555.xml
另一種是Conf.xml.
現在我只希望得到使用正則表達式的第一個文件。
string.matches("[1-9[xml[.]]]");
沒有用。
如何做到這一點?
使用string.matches("[1-9[xml[.]]]");
將不起作用,因爲[]
將創建一個字符類組,而不是一個捕獲組。
這意思是說,去渣,你的表情是說"match any of: [1-to-9 [or x, or m, or l [or *any*]]]"
(*任何*這裏是因爲你沒有逃脫.
,並且,它會創建a match any character
命令)
重要:
「\」被java識別爲字面轉義字符,並將其作爲實際匹配器的轉義字符(也是「\」,但是以字符串形式)發送到匹配器,它本身需要被因此,當你在匹配器上使用「\」時,你必須使用「\\」。
這是一個有點混亂,當你不使用它,但概括起來,送一個實際「\」進行匹配的匹配,你可能需要使用「\\\\ 「!第一個「\\」將變成匹配器的「\」,因此一個scape字符,第二個「\\」,第一個將被變成實際的「\」字符串!
正確的模式字符串匹配的###.###.###.###.xml
模式,其中「#」始終是數字,是string.matches("(\\d{3}\\.){4}xml")
,而且是它的工作原理如下:
\\d
=將匹配單個數字字符。這與使用[0-9]
的 相同,只是更簡單。{3}
指定匹配「剛好3次」爲先前的 \\d
。因此匹配###
。\\.
匹配單個點字符。()
對匹配器說明「這是一個捕獲組」 。它被下一個{4}
使用,從而創建一個「匹配 這整個###.
組正好4次」,從而創建「匹配###.###.###.###.
」。xml
將匹配 正是「XML」,其中,沿着以前的項目,使得正好符合這一模式:「###.###.###.###.xml
」。進一步學習,閱讀Java's Pattern docs.
string.matches("[1-9.]+\\.xml")
應該這樣做。
[1-9.]+
與1和9和/或句點之間的一個或多個數字匹配。 (+
表示「一個或多個」,*
表示「零個或多個」,?
表示「零個或一個」)。\.xml
比賽.xml
。由於.
意味着正則表達式中的「任何字符」,如果您希望它意味着一個文字週期:\.
(因爲它位於Java字符串中,所以反斜槓本身需要加倍轉義),您需要轉義它。
你想'/([1-9] {3} \。){4} XML /'? – Bergi
我寫了一篇[博客文章](http://xisb.wordpress.com/2012/05/09/what-absolutely-every-programmer-should-know-about-regular-expressions/)給出一個真實的簡要概述在正則表達式上,絕對基本的,每個人都應該知道。也許它可以幫助你瞭解更多細節。 – stema