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

时间:2018-01-16 23:18:10

标签: php regex preg-match anchor

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

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

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

7 个答案:

答案 0 :(得分:2)

像这样:

$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+一次或多次“贪婪”
  • $字符串结尾

并在第一个

  • (...)捕获组,用于返回其中匹配的内容。

因此$match[1]是第一个捕获组捕获的内容,$match[0]是完全匹配。

答案 1 :(得分:1)

您正在寻找testing = [1.5, 1.2, 1.0, 1.0, 1.2, 1.2, 1.5, 1.3, 2.0, 0.7, 0.2, 1.4, 1.2, 1.8, 2.0, 2.1] # This is the 'map(arr,ref) ->' function def print_links(a,b): tt = [a[b[i]-1] for i in range(0,len(a))] print("map(arr,ref) -> {}".format(tt)) # This tests the re-mapping against an original copy of the array f = 0 for i in range(0,len(testing)): if testing[i] == tt[i]: f += 1 print("{}/{}".format(f,len(a))) def quick_sort(arr,ref,first=None,last=None): if first == None: first = 0 if last == None: last = len(arr)-1 if first < last: split = partition(arr,ref,first,last) quick_sort(arr,ref,first,split-1) quick_sort(arr,ref,split+1,last) def partition(arr,ref,first,last): pivot = arr[first] left = first+1 right = last done = False while not done: while left <= right and arr[left] <= pivot: left += 1 while arr[right] >= pivot and right >= left: right -= 1 if right < left: done = True else: temp = arr[left] arr[left] = arr[right] arr[right] = temp # This is my attempt at preserving indices part 1 temp = ref[left] ref[left] = ref[right] ref[right] = temp temp = arr[first] arr[first] = arr[right] arr[right] = temp # This is my attempt at preserving indices part 2 temp = ref[first] ref[first] = ref[right] ref[right] = temp return right # Main body of code a = [1.5,1.2,1.0,1.0,1.2,1.2,1.5,1.3,2.0,0.7,0.2,1.4,1.2,1.8,2.0,2.1] b = range(1,len(a)+1) print("The following should match:") print("a = {}".format(a)) a0 = a[:] print("ref = {}".format(b)) print("----") print_links(a,b) print("\nQuicksort:") quick_sort(a,b) print(a) print("\nThe following should match:") print("arr = {}".format(a0)) print("ref = {}".format(b)) print("----") print_links(a,b) 函数将返回preg_match($pattern, $subject, $matches)boolean一个数组,其中包含从您的模式中找到的实例。

人类中的模式$matches是“以数字值结尾的字符串。”。

/[0-9]$/

将输出:

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

答案 2 :(得分:1)

您可以使用substr()获取最后一个字符,然后is_numeric()来检查它是否为数字

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

答案 3 :(得分:0)

目前,您只是检查它是否以字符串 $[0-9]结尾。

您想要做的是对/[0-9]$/字符串运行 preg_match 。数字后面的美元符号表示它们必须在结束时出现。

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之后,可以有任意数量的数字

希望这会有所帮助:)

答案 4 :(得分:0)

"$[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)) { ... }

答案 5 :(得分:0)

试试这个:

$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

答案 6 :(得分:0)

我个人可能会使用正则表达式,但为了完整性;从最后修剪数字并进行比较:

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