Java Regex:表达的意义

时间:2013-11-25 12:17:00

标签: java regex

我试图找出这个正则表达式的含义:

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

我使用regexper了解了这个表达式的含义。

我的理解:

1)新行之外的1到70个字符

2)然后可以有行结束(在表达式的末尾我们有“| $)”)

3)在非捕获组中,第二种选择是“\ S(?: - | | $)”。它说它不能是非空格字符“ - ”或SPACE或“end os line”。

我的理解可能不正确。我无法弄清楚它是如何工作的。能用一些测试数据示例向我解释一下吗?

3 个答案:

答案 0 :(得分:2)

分步说明

  • .{0,70}重复“.”0或1或2 ...最多70次(“.”=任意字符)
  • (?:...)非捕获组(不捕获字符串)
  • \\S是“\ S”(\ S是“非空白字符”)
  • (?:...)第二个非捕获组
  • -| |$-”或“”(空格)或$$ =一行的结尾)
  • |$或行尾

有关java regex see docs的更多信息。

答案 1 :(得分:1)

我们可以忽略这些群体无法捕获的事实,因为这对某些东西是否匹配没有影响,所以我们有:

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

.{0,70} 0-70个非换行符

后跟任一个(用单引号括起来以便空格可见):

  • '\S-'非空白字符和-
  • '\S '非空白字符和空格
  • '\S$'非空白字符和输入结尾
  • '$'输入结束

所以我想说,它试图匹配由-或空格分隔的多达70个字符集。

我不确定你会使用什么类型的输入。可能需要通过文本并将其分成不超过72个字符的行(最终字符是单词之间的空格或{ {1}}用带连字符的单词)?

为了举例,如果将-缩减为.{0,70},您可以在以下输入中使用它:

.{0,10)

将其拆分为:

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

RegExr Example

答案 2 :(得分: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