2013-11-25 90 views
0

我試圖找出這個意義正則表達式的含義:Java的正則表達式:表達

.{0,70}(?:\\S(?:-| |$)|$) 

我明白使用regexper這種表達的意義。

我的理解:

1)1至70個字符,除了新行

2)然後可以有行結束(在我們表達的盡頭「| $)」)或

3)在非捕獲組中第二個替代方案是「\ S(?: - | | $)」。它表示它不能是非空白字符「 - 」或SPACE或「最終os行」。

我的理解可能不正確。我無法知道它是如何工作的。你能用一些測試數據例子來解釋我嗎?

+1

你試過看看正則表達式符號表嗎?或者你瞭解它的一部分?更清楚導致混淆的原因。 – keyser

+0

你從哪裏得到它的? –

+0

對不起,我們不會在這裏爲您編寫教程。已經有很多很棒的,比如[this](http://www.regular-expressions.info/tutorial.html)。投票表達您的問題,直到您指定哪個部分完全混淆您。 – Pshemo

回答

1

我們不能忽視的事實組都是非caputuring,因爲有東西是否匹配沒有影響,所以我們必須:接着爲無論是

.{0,70}(\\S(-| |$)|$) 

.{0,70} 0-70非新行字符

(包圍在單引號這樣的空間是可見的):

  • '\S-'非空白字符和-
  • '\S '一個非空白字符和輸入的空間
  • '\S$'一個非空白字符和結束
  • '$'輸入端

所以我想說,它試圖匹配任何由多達70個字符組成的字符集,這些字符集由-或空格分隔。

我不確定你會用什麼樣的輸入。有可能是需要一段文本並將它分割成不超過72個字符的行(最後一個字符是單詞之間的空格或一個連字符中的-)?

舉一個例子的緣故,如果您降低.{0,70}.{0,10)中,你可以使用它在下面輸入:

"Hello how are you? My name is Dr Bob Scott-Thomas" 

將它分爲:

  |<-10 limit here 
"Hello how " 
"are you? "| 
"My name is " 
"Dr Bob " | 
"Scott-" | 
"Thomas" | 

+1

感謝您的簡單和明確的例子。它幫助我理解它的意義。 – user613114

2

一步一步的解釋

  • .{0,70}重複 「.」 0或1或2 ...高達70倍( 「.」=任何字符)
  • (?:...)非捕獲組(唐」噸捕獲字符串)
  • \\S是 「\ S」(\ S是 「A非空白字符」)
  • (?:...)第二非捕獲組
  • -| |$-」 或 「」(空格)或$$ =α線的末端)
  • |$或線

的結束有關Java正則表達式see docs更詳細的信息。

+0

只是爲了澄清:'.' =任何_one_符號。 '\ s'匹配空格(空格,製表符和換行符)。 '\ S'是否定的'\ s' 。 – keyser

+1

我已經編輯了你的評論我的回答。謝謝。 –

+1

你得到+1 – keyser

0

我只是它插入regex101,這就是它說:

. 0 to 70 times [greedy] Any character (except newline) 
(?:\S(?:-| |$)|$) Non-capturing Group 
1st Alternative: \S(?:-| |$) 
    \S Any char except whitespaces [^\t \r\n\f\v] 
    (?:-| |$) Non-capturing Group 
    1st Alternative: - 
    Literal - 
    2nd Alternative: 
    Space (ASCII 32) 
    3rd Alternative: $ 
    $ End of string 
2nd Alternative: $ 
    $ End of string