了解用于读取tsv文件的两个regexp
我在某个地方找到了一个带有正则表达式的tsv文件,但我真的不理解它们:) 它们是:了解用于读取tsv文件的两个regexp,regex,xslt,xslt-2.0,Regex,Xslt,Xslt 2.0,我在某个地方找到了一个带有正则表达式的tsv文件,但我真的不理解它们:) 它们是: (..*) 对于整个文档和 ([^\t][^\t]*)\t?|\t 对于值。我在regexpal中玩过,我不明白的是,为什么我不能使用 (.*) 及 相反 至少我在使用xslt分析字符串时遇到了一个错误(错误:长度为零的字符串)。不能使用(.*)而不是(..*),因为新表达式匹配空字符串,而原始表达式至少需要一个字符。但是,您可以使用(.+),这相当于(..*)表达式 第二个表达式也是如此:您可以使用+这样
(..*)
对于整个文档和
([^\t][^\t]*)\t?|\t
对于值。我在regexpal中玩过,我不明白的是,为什么我不能使用
(.*)
及
相反
至少我在使用xslt分析字符串时遇到了一个错误(错误:长度为零的字符串)。不能使用(.*)
而不是(..*)
,因为新表达式匹配空字符串,而原始表达式至少需要一个字符。但是,您可以使用(.+)
,这相当于(..*)
表达式
第二个表达式也是如此:您可以使用+
这样重写它:
([^\t]+)\t?|\t
原始表达式似乎缺少第一个或第二个子表达式周围的括号:
(([^\t]+)\t?)|\t
否则,|
将应用于\t?
,使其成为“可选选项卡或选项卡”,这几乎没有意义。您不能使用(.*)
而不是(..*)
,因为新表达式匹配空字符串,而原始表达式至少需要一个字符。但是,您可以使用(.+)
,这相当于(..*)
表达式
第二个表达式也是如此:您可以使用+
这样重写它:
([^\t]+)\t?|\t
原始表达式似乎缺少第一个或第二个子表达式周围的括号:
(([^\t]+)\t?)|\t
否则,
|
将应用于\t?
,使其成为“可选选项卡或选项卡”,这几乎没有意义。您可以将(…*)
缩短为(.+)
,因为它们匹配一个或多个字符。使用相同的方法,您可以将第二个表达式中的[^\t][^\t]*
缩短为[^\t]+
,因为这将匹配一个或多个非制表符。您可以将(..*)
缩短为(.+)
,因为它们匹配一个或多个字符。使用相同的方法,您可以将第二个表达式中的[^\t][^\t]*
缩短为[^\t]+
,因为这将匹配一个或多个非制表符。可能需要注意的是,您的第二个示例((?:([^\t]+)\t?)\t
)仅在XSLT 3.0中有效。它将在XSLT2.0中抛出一个(非捕获组)。@DanielHaley你说得对,这个问题是专门为XSLT2.0标记的。可能需要注意的是,您的第二个示例((?:([^\t]+)\t?)|\t
)仅在XSLT 3.0中有效。它将在XSLT2.0中抛出一个(非捕获组)。@DanielHaley你说得对,这个问题是专门为XSLT2.0标记的。编辑。