2009-08-25 66 views
2

我正在將程序從Perl轉換爲Java。我所遇到的行這個正則表達式有什麼作用?

my ($title) = ($info{$host} =~ /^\s*\(([^\)]+)\)\s*$/); 

我不是很好的正則表達式,但是從我可以告訴這串$信息{$主機}是匹配的東西正則表達式^ \ S *( ([^)] +))\ s * $並將匹配分配給$ title。

我的問題是,我不知道是什麼的正則表達式是做什麼,它將匹配。任何幫助,將不勝感激。

由於

+0

嘗試Expresso(http://www.ultrapico.com/),它解析正則表達式並顯示它們如何操作。 – 2009-08-25 13:46:05

回答

4

正則表達式,其中包含恰好一個對匹配括號(實際上,可能發生一個開口和一個匹配閉括號,但任何數量的進一步開放括號內)的字符串匹配。

字符串可以開始,以空白字符結尾,但沒有其他人。然而,在內在的派生,可能會出現任意字符(至少一個)。

以下字符串應該與之相匹配:

(abc) 
(() 
    (ab) 

順便說一句,你可以簡單地使用正則表達式,是Java(逃避反斜槓後),使用Pattern類。

+0

好的,所以(有些字符串)匹配,但(某些)字符串)不是。 謝謝。 – 2009-08-25 09:36:39

+0

現在我知道它是什麼,我發現它是多餘的。有了輸入的所有可能性,可以使用trim() – 2009-08-25 10:56:37

4

它將匹配一堆領先的空白,接着是左括號,其次是一些文字不包括右括號,然後是右括號,其次是一些更多的空白。

匹配:

 (some stuff) 

失敗:

(some stuff 

    some stuff) 

    (some stuff) asadsad 
+1

...(不包括parens)中的東西被重新轉換爲$ title變量 – 2009-08-25 09:45:20

1

好步步

/- 引用的正則表達式

^- 字符串的開頭

\ S * - 零個或多個任何類空字符

的( - 實際(字符

( - 開始一個捕獲組

[^)] +的任何字符^或)的+指示至少一個

)末端的捕獲組

)和實際)字符

\ S *零個或多個類似的字符

$空間 - 該字符串的結尾

/- 關閉正則表達式報價

所以據我可以工作了,我們正在尋找字符串比如「(^)」或「())」我在這裏錯過了一些東西。

+2

[^)]表示任何,但) – larelogio 2009-08-25 11:29:06

+0

謝謝 - 你(重新)每天學習新的東西。 – 2009-08-26 01:10:03

0
my ($title) = ($info{$host} =~ /^\s*\(([^\)]+)\)\s*$/); 

首先,列表上下文中的m//返回捕獲的匹配。 my ($title)將右側放在列表上下文中。其次,$info{$host}是針對以下模式匹配:

/^ \s* \(([^\)]+) \) \s* $/x 

是,所用的x標誌,所以我可以插入一些空間。 ^\s*跳過任何領先的空格。然後我們有一個逃脫的paranthesis(因此沒有捕獲組被創建,然後我們有一個包含[^\)]的捕獲組,這個字符類可以更好地寫成[^)],因爲右括號在字符類中並不特殊,並且意味着除左括號

如果除了以下左括號後跟一個右括號任選由空格兩側包圍的閉括號之外的一個或多個字符,字符的該序列被捕獲並投入到$x

相關問題