我需要解析一个字符串并获取两个分隔符之间的数字。我需要确定它们是数字。我尝试了这样的事情,但没有按预期工作。
if (preg_match_all("/[^0-9](?<=First)(.*?)(?=Second)/s", $haystack, $result))
for ($i = 1; count($result) > $i; $i++) {
print_r($result[$i]);
}
正则表达式有什么问题?
嗯,这几乎是我提供给你另一个问题的那个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]);
您可以使用[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)