我正在阅读一个带有正则表达式的tsv文件,我在某个地方找到了,但我真的不理解它们:)
他们是:
(..*)
整个文档和
([^\t][^\t]*)\t?|\t
表示值。我在regexpal中玩过,我不知道的是,为什么我不能使用
(.*)
和
([^\t]*)\t?
代替。
至少我在使用xslt analyze-string时出错(错误:零长度字符串)。
答案 0 :(得分:2)
您无法使用(.*)
代替(..*)
,因为您的新表达式与空字符串匹配,而原始字符串至少需要一个字符。但是,您可以使用(.+)
,这相当于(..*)
表达式。
第二个表达式也是如此:您可以使用+
重写它,如下所示:
([^\t]+)\t?|\t
看起来原始表达式在第一个OR-ed子表达式周围缺少括号:
(([^\t]+)\t?)|\t
否则,|
适用于\t?
,使其成为“可选标签或标签”,这几乎没有意义。
答案 1 :(得分:2)
您可以将(..*)
缩短为(.+)
,因为这些匹配一个或多个字符。使用相同的方法,您可以将第二个表达式中的[^\t][^\t]*
缩短为[^\t]+
,因为它会匹配一个或多个非制表符。