理解用于读取tsv文件的两个正则表达式

时间:2015-03-11 12:57:32

标签: regex xslt xslt-2.0

我正在阅读一个带有正则表达式的tsv文件,我在某个地方找到了,但我真的不理解它们:)

他们是:

(..*)

整个文档和

([^\t][^\t]*)\t?|\t

表示值。我在regexpal中玩过,我不知道的是,为什么我不能使用

(.*)

([^\t]*)\t?

代替。

至少我在使用xslt analyze-string时出错(错误:零长度字符串)。

2 个答案:

答案 0 :(得分:2)

您无法使用(.*)代替(..*),因为您的新表达式与空字符串匹配,而原始字符串至少需要一个字符。但是,您可以使用(.+),这相当于(..*)表达式。

第二个表达式也是如此:您可以使用+重写它,如下所示:

([^\t]+)\t?|\t

看起来原始表达式在第一个OR-ed子表达式周围缺少括号:

(([^\t]+)\t?)|\t

否则,|适用于\t?,使其成为“可选标签或标签”,这几乎没有意义。

答案 1 :(得分:2)

您可以将(..*)缩短为(.+),因为这些匹配一个或多个字符。使用相同的方法,您可以将第二个表达式中的[^\t][^\t]*缩短为[^\t]+,因为它会匹配一个或多个非制表符。