检查字符串是否以 php 中的数字结尾

Checks if a string ends with a number in php

我想测试以我知道的字符串开头的变量;它以一个我不知道的数字结尾,所以我做的测试是:

foreach ($json as $key => $value) {
    if ($key == 'IF-MIB::ifDescr.'."$[0-9]")
        echo $key . '=>' . $value . '<br/>';
}

我用这个测试过,但它不起作用。

像这样:

$str = 'IF-MIB::ifDescr1';

 if(preg_match('/^IF-MIB::ifDescr([0-9]+)$/', $str, $match)){
      echo $match[1];
 }

输出:

 1

Live Demo

所以将它们放在一起用于您的用例:

foreach ($json as $key => $value) {
   if (preg_match('/^IF-MIB::ifDescr[0-9]+$/', $key)){
       echo $key . '=>' . $value . '<br/>';
   }
}

开头的^表示字符串必须以I开头,多出的括号和加上这次表示IF-MIB::ifDescr之后可以有任何数字的数量。

简单说明一下:

  • ^ 是字符串的开始
  • IF-MIB::ifDescr 匹配文字字符串
  • [0-9]字符集09+一次或多次"greedy"
  • $ 字符串结尾

第一个

  • (...)捕获组,用于return里面匹配的内容

所以$match[1]是第一个捕获组捕获的,$match[0]是全匹配。

就目前而言,您只是检查它是否以 字符串 $[0-9].

结尾

你想要做的是 运行 一个 preg_match 作为 /[0-9]$/ 的字符串。数字后面的美元符号表示它们必须在末尾。

foreach ($json as $key => $value) {
  if (preg_match("/[0-9]$/", $key) {
    echo $key . '=>' . $value . '<br/>';
  }
}

请注意,如果您还想在开头添加其他组件,可以通过以下方式实现:

foreach ($json as $key => $value) {
  if (preg_match("/^IF-MIB::ifDescr([0-9]+)$/", $key) {
    echo $key . '=>' . $value . '<br/>';
  }
}

开头的^表示字符串必须以I开头,多出的括号和加上这次表示在IF-MIB::ifDescr之后可以是任意数字数字。

希望这对您有所帮助:)

"$[0-9]"固然是一个正则表达式,但对PHP来说,它只是另一个字符串。

您需要使用计算正则表达式的函数。 preg_match() 会为您完成这项工作。

在此之前,您应该知道 $[0-9] 实际上不会匹配您想要的内容,因为 $ 匹配行或字符串的结尾。相反,像这样将其交换为捕获范围的末尾 - [0-9]$.

我们想要匹配 IF-MIB::ifDescr1<EOL> 而不是 <EOL>IF-MIB::ifDescr1

为了确保我们的字符串以 IF-MIB::ifDescr 开头,我们使用与 $ 相反的锚点,即 ^ —— 匹配行或字符串的开头。如果没有这些锚点,您将匹配 <whatever>IF-MIB1::ifDescr1<whatever>.

这样的字符串
if (preg_match("/^IF-MIB::ifDescr[0-9]$/", $key, $matches)) { ... }

您正在寻找 preg_match($pattern, $subject, $matches) 其中函数将 return boolean$matches 一个数组,其中包含从您的模式中找到的实例。

人类的模式/[0-9]$/是“以数值结尾的字符串”。

$word = "asdfñlkas6";
var_dump(preg_match('/[0-9]$/', $word, $matches));
var_dump($matches);

将输出:

int(1)
array(1) {
  [0]=> string(1) "6"
}

试试这个:

$str = 'IF-MIB::ifDescr.';
foreach ($json as $key => $value) {
  $checker = trim($str,$value);

  if(is_numeric($checker ))
    echo $key . '=>' . $value . '<br/>';

}

Reference for is_numeric

Reference for trim

您可以使用 substr() to get last character then is_numeric() 检查它是否为数字

foreach ($json as $key => $value) {
    if (is_numeric(substr($key, -1))) {
        echo $key . '=>' . $value . '<br/>';
    }
}

我个人可能会使用正则表达式,但为了完整性; trim 数字从末尾开始比较:

if(($s = rtrim($key, '0..9')) == 'IF-MIB::ifDescr' && $s != $key)
    echo $key . '=>' . $value . '<br/>';
}