检查字符串是否以 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
所以将它们放在一起用于您的用例:
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]
字符集0
到9
、+
一次或多次"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/>';
}
您可以使用 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/>';
}
我想测试以我知道的字符串开头的变量;它以一个我不知道的数字结尾,所以我做的测试是:
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
所以将它们放在一起用于您的用例:
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]
字符集0
到9
、+
一次或多次"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/>';
}
您可以使用 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/>';
}