如何获取字符串中的最后一个整数?

时间:2017-01-12 21:42:04

标签: php

我有这样的变量:

$path1 = "<span class='span1' data-id=2>lorem ipsum</span>";
$path2 = "<span class='span2' data-id=14>lorem ipsum</span>";

我需要获得data-id的价值,但我认为这在php中是不可能的。

也许可以获得字符串中的最后一个整数? 类似的东西:

$a = $path1.lastinteger(); // 2
$b = $path2.lastinteger(); // 14

任何帮助?

7 个答案:

答案 0 :(得分:2)

您可以使用简单的正则表达式:

/data-id=[\"\']([1-9]+)[\"\']/g

然后你可以建立这个功能:

function lastinteger($item) {
    preg_match_all('/data-id=[\"\']([1-9]+)[\"\']/',$item,$array);

    $out = end($array);

    return $out[0];
}

工作DEMO

完整代码:

function lastinteger($item) {
    preg_match_all('/data-id=[\"\']([1-9]+)[\"\']/',$item,$array);

    $out = end($array);

    return $out[0];
}

$path1 = "<span class='span1' data-id=2>lorem ipsum</span>";
$path2 = "<span class='span2' data-id=14>lorem ipsum</span>";

$a = lastinteger($path1); //2
$b = lastinteger($path2); //14

参考文献:

正则表达式教程:tutorialspoint.com

创建正则表达式的好工具:regexr.com

答案 1 :(得分:2)

如果您不使用正则表达式,则可以使用DOM API:

$dom = DOMDocument::loadHTML($path2);
echo $dom->getElementsByTagName('span')[0]->getAttribute('data-id');

答案 2 :(得分:1)

根据这些变量的设置方式,一种解决方案可能是先获取整数,然后将其注入路径:

$dataId = 2;
$path1 = "<span class='span1' data-id='$dataId'>lorem ipsum</span>";

(请注意,我在data-id值周围添加了引号,否则您的HTML无效。)

如果你不是自己构建字符串,但需要解析它们,我不会简单地得到最后一个整数。原因是你可能得到这样的标签:

<span class='span1' data-id='4'>Happy 25th birthday!</span>

在这种情况下,字符串中的最后一个整数是25,这不是你想要的。相反,我会使用正则表达式来捕获data-id属性的值:

$path1 = "<span class='span1' data-id='2'>lorem ipsum</span>";
preg_match('/data-id=\'(\d+)\'/', $path1, $matches);
$dataId = $matches[1];
echo($dataId); // => 2

答案 3 :(得分:1)

我认为您应该使用正则表达式,例如:

<?php
$paths = [];
$paths[] = '<span class=\'span1\' data-id=2>lorem ipsum dolor</span>';
$paths[] = '<span class=\'span2\' data-id=14>lorem ipsum</span>';
foreach($paths as $path){
    preg_match('/data-id=([0-9]+)/', $path, $data_id);
    echo 'data-id for '.$path.' is '.$data_id[1].'<br />';
}

这将输出:

  

lorem ipsum dolor的data-id为2

     

lorem ipsum的data-id为14

答案 4 :(得分:1)

 function find($path){

$countPath = strlen($path);

for ($i = 0; $i < $countPath; $i++) {

    if (substr($path, $i, 3) == "-id") {

        echo substr($path, $i + 4, 1);

    }
}}find($path1);

答案 5 :(得分:1)

为此目的写了一个适当的功能。

function LastNumber($text){
    $strlength = strlen($text);   // get length of the string
    $lastNumber = '';             // this variable will accumulate digits
    $numberFound = 0;             

    for($i = $strlength - 1; $i > 0; $i--){   // for cicle reads your string from end to start
        if(ctype_digit($text[$i])){
            $lastNumber = $lastNumber . $text[$i];  // if digit is found, it is added to last number string;
            $numberFound = 1;  // and numberFound variable is set to 1
        }else if($numberFound){  // if atleast one digit was found (numberFound == 1) and we find non-digit, we know that last number of the string is over so we break from the cicle.
            break;
        }
    }
    return intval(strrev($lastNumber), 10); // strrev reverses last number string, because we read original string from end to start. Finally, intval function converts string to integer with base 10
}

答案 6 :(得分:1)

我知道这已经得到了回答,但是如果你真的想要在一行中得到最后一个int而没有专门提到属性或标签名称,那么考虑使用它。

$str = "
asfdl;kjas;lkjfasl;kfjas;lf  999 asdflkasjfdl;askjf
<span class='span1' data-id=2>lorem ipsum</span>
<span class='span2' data-id=14>lorem ipsum</span>


Look at me I end with a number 1234
";


$matches = NULL;
$num = preg_match_all('/(.*)(?<!\d)(\d+)[^0-9]*$/m', $str, $matches);

if (!$num) {
  echo "no matches found\n";
} else {
    var_dump($matches[2]);
}

它将从每行的最后一个整数的多行输入返回一个数组:

array(4) {
  [0] =>
  string(3) "999"
  [1] =>
  string(1) "2"
  [2] =>
  string(2) "14"
  [3] =>
  string(4) "1234"
}