我正在使用.{0,70}(?:\\S(?:-| |$)|$)
来匹配a/n b/n c/n
之类的字符串,但只匹配最后一个字符串,即c
。
例如:
hello(newline)world(NL)java(NL)
只匹配java
但是当我将正则表达式修改为.{0,70}(?:\\S(?:|-| |$)|$)
时,它的效果非常好。任何人都可以解释这个
答案 0 :(得分:2)
你的第二个正则表达式“有效”,因为你为替换添加了一个空的替代方法,即它从(a|b)
转到(a|b|)
,它将匹配a
或b
或“无”(零宽度,它不必是空格字符或任何东西,它将在字符之间匹配)。
它不起作用,但.
匹配除换行符之外的所有内容,并且所有行都以非空白字符结尾,因此.{0,70}\S
+“nothing”将始终匹配。
我的要求太不明确了,我没有给你一个明确的答案(我不确定空格和-
在交替中的位置。但是,如果你真的只是试图匹配线上出现的任何内容,我认为没有理由不能只使用.*\S
(这会给你类似的匹配你的“工作”正则表达式)。但如果.*\S
满足您的需求,您可能应该只是通过换行符分割字符串并正确修剪它。