2013-11-25 44 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