【问题标题】:Parsing int from a string after specific part in PHP在 PHP 中的特定部分之后从字符串中解析 int
【发布时间】:2018-06-08 22:16:53
【问题描述】:

每次出现特定部分时,如何从不断变化的字符串中解析一个或多个整数。例如:

$output = "jack john 123 jill £2310 peter paul 123 328190 john john peter 1 paul 049 peter paul 999"; 

我只需要“彼得保罗”之后的整数,在这种情况下是 123 和 999。无论“彼得保罗”出现多少次都应该工作。将它们解析为数组可能是要走的路吗?

【问题讨论】:

  • 一个preg_matchpositive lookbehind 是要走的路
  • (?<=peter paul )[\d]* 这样的东西就是正则表达式
  • 更好(?<=peter paul\s+)[\d]+
  • 真的。但必须是(?<=peter paul[\s+])[\d]+(至少regex101.com 在没有[] 的情况下给出错误)。或者只是没有量词。

标签: php string parsing int


【解决方案1】:

为此,您需要 php 函数 preg_match_all() 使用的正则表达式。特别是带有positive lookbehind 的一个。

<?php
// your input
$haystack = "jack john 123 jill £2310 peter paul 123 328190 john john peter 1 paul 049 peter paul 999";

// find the matches and write them into $matches
preg_match_all('/(?<=peter paul\s)[\d]+/', $haystack, $matches, PREG_OFFSET_CAPTURE);
// output
print_r($matches);

正则表达式(?&lt;=peter paul\s)[\d]+很简单用普通语言解释:

查找所有之后 (?&lt;=) 'pater paul' 后跟一个空格 (\s),它是一个数字 (\d),出现 1 到 n 次 (@987654329 @)

工作 sn-p:https://3v4l.org/YsMuM

【讨论】:

  • 由于某种原因,似乎只匹配第一个,也根据 regex101.com。
  • 最后是全局标志/g!我们必须使用 preg_match_all。我改变了答案。
猜你喜欢
  • 2011-01-20
  • 2020-06-17
  • 2020-01-05
  • 2021-08-02
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2019-02-12
相关资源
最近更新 更多