Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解用于读取tsv文件的两个regexp_Regex_Xslt_Xslt 2.0 - Fatal编程技术网

了解用于读取tsv文件的两个regexp

了解用于读取tsv文件的两个regexp,regex,xslt,xslt-2.0,Regex,Xslt,Xslt 2.0,我在某个地方找到了一个带有正则表达式的tsv文件,但我真的不理解它们:) 它们是: (..*) 对于整个文档和 ([^\t][^\t]*)\t?|\t 对于值。我在regexpal中玩过,我不明白的是,为什么我不能使用 (.*) 及 相反 至少我在使用xslt分析字符串时遇到了一个错误(错误:长度为零的字符串)。不能使用(.*)而不是(..*),因为新表达式匹配空字符串,而原始表达式至少需要一个字符。但是,您可以使用(.+),这相当于(..*)表达式 第二个表达式也是如此:您可以使用+这样

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

它们是:

(..*)
对于整个文档和

([^\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标记的。编辑。