我试图找出这个正则表达式的含义:
.{0,70}(?:\\S(?:-| |$)|$)
我使用regexper了解了这个表达式的含义。
我的理解:
1)新行之外的1到70个字符
2)然后可以有行结束(在表达式的末尾我们有“| $)”)
3)在非捕获组中,第二种选择是“\ S(?: - | | $)”。它说它不能是非空格字符“ - ”或SPACE或“end os line”。
我的理解可能不正确。我无法弄清楚它是如何工作的。能用一些测试数据示例向我解释一下吗?
答案 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"
答案 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