-2

我需要解析一个字符串并获取两个分隔符之间的数字。我需要确定它们是数字。我尝试了这样的事情,但没有按预期工作。

if (preg_match_all("/[^0-9](?<=First)(.*?)(?=Second)/s", $haystack, $result))
for ($i = 1; count($result) > $i; $i++) {
    print_r($result[$i]);
}

正则表达式有什么问题?

4

2 回答 2

1

嗯,这几乎是我提供给你另一个问题的那个xD

更改(.*?)([0-9]+)

if (preg_match_all("/(?<=First)([0-9]+)(?=Second)/s", $haystack, $result))
for ($i = 1; count($result) > $i; $i++) {
    print_r($result[$i]);
}

.*?将匹配任何字符(换行符除外)并仅匹配分隔符“First”和“Second”之间的数字,您需要将其更改为[0-9]. 然后,我假设它们之间不可能没有任何东西,所以我们使用 a+而不是 a *

我不知道你为什么[^0-9]一开始使用。通常[^0-9]意味着一个不是数字的字符,至少在我看来,把它放在那里并没有真正有用。


稍微清理一下,您可以删除一些不需要的东西来获得所需的输出:

if (preg_match_all("/(?<=First)[0-9]+(?=Second)/", $haystack, $result))
   print_r($result[0]);
于 2013-08-13T18:40:09.897 回答
0

您可以使用[0-9]or\d来确保分隔符之间的字符是数字。使用它你也不需要惰性量词(除非你的分隔符实际上也是数字):

preg_match_all("/[^0-9](?<=First)(\d*)(?=Second)/s", $haystack, $result)

或者

preg_match_all("/[^0-9](?<=First)([0-9]*)(?=Second)/s", $haystack, $result)
于 2013-08-13T18:40:11.283 回答