【问题标题】:How get a certain numeric value inside array of string in PHP?如何在PHP中的字符串数组中获取某个数值?
【发布时间】:2019-11-20 09:48:52
【问题描述】:

我有一个字符串$line。例如,

$line = "stringA stringB 4-stringC stringD stringF 12345 stringG 678249 stringH ";

根据var$line,字符串有6个字,2个数值,1个数字和字符串的组合字。

我想捕捉某个字符串,它是一个数值12345。这是我刚刚尝试过的代码:

if (preg_match('/ ([0-9,]+)/', $line, $matches) === 1 && strlen($matches[0]) > 3 && strlen($matches[1]) > 3) {
    echo var_dump($matches[0]);
}

但是,一旦跟踪,代码似乎只取字符串上的第一个数值。结果是:

array(2) {
  [0]=>
  string(2) " 4"
  [1]=>
  string(1) "4"
}

而不是12345

那么,如果我只想捕获字符串包含:12345,我应该使用什么“正则表达式”?

【问题讨论】:

  • \d{5} 得到 5 位数字
  • 发布更多你想要拆分的不同字符串。
  • @jibsteroos 如何设置 get $matches 超过 4 位,并在 preg_match() 中管理? '/ ([0-9,]+\d{5})/'
  • @MatthiasS 我试过preg_match_all,但没有显示结果。获取last occurence 可能是一个解决方案,但是,如果在12345 之后还有另一个数字字符串,可能会有风险。您对此有什么建议吗?
  • @AgnesPalit 见3v4l.org/49hD7

标签: php regex laravel


【解决方案1】:

您可以使用单词边界 \b 并使用量词 {4,} 匹配 4 个或更多数字

\b\d{4,}\b

例如

$line = "string string 4-string string string 12345 string 678249 string ";
if (preg_match('/\b\d{4,}\b/', $line, $matches)) {
    var_dump($matches);
}

输出

array(1) {
  [0]=>
  string(5) "12345"
}

Php demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 2019-07-03
    相关资源
    最近更新 更多