Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/38.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
PHP preg_match_除了正确的匹配之外,还提供-1的偏移量_Php_Regex_Preg Match - Fatal编程技术网

PHP preg_match_除了正确的匹配之外,还提供-1的偏移量

PHP preg_match_除了正确的匹配之外,还提供-1的偏移量,php,regex,preg-match,Php,Regex,Preg Match,这似乎是一种奇怪的行为,或者我不太理解正则表达式 我正在使用它查找PDF文件中的所有外部参照和尾部对象: preg_match_all('@(\nxref\r?\n)|(\strailer\s)@',$pdfcontent,$matches,PREG_OFFSET_CAPTURE); print\r为我提供了以下信息: Array ( [0] => Array ( [0] => Array (

这似乎是一种奇怪的行为,或者我不太理解正则表达式

我正在使用它查找PDF文件中的所有外部参照和尾部对象:

preg_match_all('@(\nxref\r?\n)|(\strailer\s)@',$pdfcontent,$matches,PREG_OFFSET_CAPTURE);
print\r为我提供了以下信息:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] =>
xref
                    [1] => 13235519
                )

            [1] => Array
                (
                    [0] =>
trailer
                    [1] => 13299371
                )
        )

    [1] => Array
        (
            [0] => Array
                (
                    [0] =>
xref
                    [1] => 13235519
                )

            [1] => Array
                (
                    [0] =>
                    [1] => -1
                )
        )

    [2] => Array
        (
            [0] =>
            [1] => Array
                (
                    [0] =>
trailer
                    [1] => 13299371
                )
        )
)

为什么外部参照的位置为-1?

这似乎是正常的行为,但大多没有记录在案。
-1
偏移量也用于不存在的匹配

要回答标题,将交替返回
-1
偏移量,而不是附加返回。您的模式中有一个可选的
(a)|(b)
匹配组。因此,它可以很好地为
外部参照
返回偏移和匹配,但为
尾部
返回不匹配

PHP手册页面中没有明确提到这一点。但PCRE具有:

[…]发生这种情况时,偏移量对中的两个值都会对应- 对未使用子模式的响应设置为-1

您可以用一个更简单的例子来重现它:

preg_match_all('/(a)|(b)|(c)/', "abc", $m, PREG_OFFSET_CAPTURE)
and print_r($m);

[看一看]。这种行为有点令人困惑。似乎将
-1
用作早期非匹配的偏移量。但随后的失败匹配只是在结果数组中不存在。例如,本例给出了
[0,-1,-1]
[unde,1,-1]
[unde,unde,2]
。我会得出结论,这是一种模糊的行为。

这似乎是正常的行为,但大多没有记录在案。
-1
偏移量也用于不存在的匹配

要回答标题,将交替返回
-1
偏移量,而不是附加返回。您的模式中有一个可选的
(a)|(b)
匹配组。因此,它可以很好地为
外部参照
返回偏移和匹配,但为
尾部
返回不匹配

PHP手册页面中没有明确提到这一点。但PCRE具有:

[…]发生这种情况时,偏移量对中的两个值都会对应- 对未使用子模式的响应设置为-1

您可以用一个更简单的例子来重现它:

preg_match_all('/(a)|(b)|(c)/', "abc", $m, PREG_OFFSET_CAPTURE)
and print_r($m);

[看一看]。这种行为有点令人困惑。似乎将
-1
用作早期非匹配的偏移量。但随后的失败匹配只是在结果数组中不存在。例如,本例给出了
[0,-1,-1]
[unde,1,-1]
[unde,unde,2]
。我认为这是一种模糊的行为。

在我看来,你有2个
xref
,中间没有
拖车。比如:

xref
shgfjqhfkj

xref
 shgfjqhfkj
 trailer 
而匹配组是错误的

我会用以下内容更改正则表达式:

'@(\nxref\r?\n|\strailer\s)@'

在我看来,您有两个
外部参照
,中间没有
拖车
。比如:

xref
shgfjqhfkj

xref
 shgfjqhfkj
 trailer 
而匹配组是错误的

我会用以下内容更改正则表达式:

'@(\nxref\r?\n|\strailer\s)@'

-1表示正则表达式匹配,通常表示未找到匹配项。已找到匹配项。第二次出现时,它给出了匹配值和-1值。有人能给我解释一下吗,或者你只是想嘲笑我的愚蠢,而我搔搔头?虽然我不是选民中的一员,但这不是一个很清楚的问题。您的问题是“PHP preg_match_all giving offset of-1”,我的评论回答了您的问题。你并没有说你想用你的正则表达式模式找到什么,所以我们怎么可能知道它是对的还是错的。所以,请添加您正在搜索的内容。PDF文件是10MB,我不能在这里发布。我的代码所做的一切与我发布的完全一样,即在文件中搜索“xref”或“trailer”的出现。这不是问题所在。问题是这是否是preg_match_all的正常行为。如果查看打印结果,您可以看到索引0每个都有一个查找,索引1有两个查找,包括-1,索引2有两个查找,只有一个是空数组。我觉得这听起来不像是正常的行为。也许下层选民想解释一下,这对他们来说是否如此明显。-1对于正则表达式匹配通常意味着没有找到匹配项。找到了匹配项。第二次出现时,它给出了匹配值和-1值。有人能给我解释一下吗,或者你只是想嘲笑我的愚蠢,而我搔搔头?虽然我不是选民中的一员,但这不是一个很清楚的问题。您的问题是“PHP preg_match_all giving offset of-1”,我的评论回答了您的问题。你并没有说你想用你的正则表达式模式找到什么,所以我们怎么可能知道它是对的还是错的。所以,请添加您正在搜索的内容。PDF文件是10MB,我不能在这里发布。我的代码所做的一切与我发布的完全一样,即在文件中搜索“xref”或“trailer”的出现。这不是问题所在。问题是这是否是preg_match_all的正常行为。如果查看打印结果,您可以看到索引0每个都有一个查找,索引1有两个查找,包括-1,索引2有两个查找,只有一个是空数组。我觉得这听起来不像是正常的行为。也许下层选民想解释一下,这对他们来说是否如此显而易见。