0

我有一个遵循以下语法的不同字符串:x-y12h-z13-1

我希望能够使用 PHP 获取“z”之后的整数。在这个例子中,它将是 13。我不确定找出它的最佳方法,而且我非常不擅长正则表达式。

任何帮助是极大的赞赏。

编辑:字符串在“z”整数值之前和之后的长度也可以不同。

4

7 回答 7

1
<?php
preg_match('/(?<=z)\d+/', 'x-y12h-z13-1', $matches);
var_dump($matches[0]);

匹配一个或多个前面带有 az 的数字。http://codepad.viper-7.com/X5mu2m

于 2013-04-15T18:21:26.713 回答
0
$your_integer = (int)substr($str, strpos($str, "z") + 1);

这会找到第一个 z,然后切断字符串,包括 z。

然后我依靠 PHP 的转换行为读取第一个字符,直到它找不到更多数字并将它们转换为整数。

于 2013-04-15T18:30:05.143 回答
0

如果“z”是真正稳定的值,那么

$subject = "x-y12h-z13-1";
$pattern = '/-z(\d*)-/i';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

echo $matches[1][0];

如果结构稳定,则

$subject = "x-y12h-z13-1";
$pattern = '/^.*-.*-\w(\d*)-.*/i';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

echo $matches[1][0];
于 2013-04-15T18:28:26.463 回答
0

字符串的一般正则表达式:

<?php

$value = preg_match('/^x-y(\d+)h-z(\d+)-(\d+)/','x-y12h-z13-1', $matches); 
print_r($matches);

$matches[2] 包含 'z' 之后的值

输出:

Array
(
    [0] => x-y12h-z13-1
    [1] => 12
    [2] => 13
    [3] => 1
)  
于 2013-04-15T18:28:34.957 回答
0

这段代码应该适合你

$string = "x-y12h-z13-1";

$expl = explode("-", $string);
$str = "";   
foreach ($expl as $arr) {
    $strpos = "";
    $strpos = strstr( $arr, "z"); 

    if ($strpos) { 
        $str = substr($arr, "1",strlen($arr));
    }


}

echo $str;

$str 将使您的字符串输出为 13。

于 2013-04-15T18:29:40.507 回答
0

您也可以使用字符串函数提取它,这是示例:

$a = 'x-y12h-z13-1'; echo substr(strstr($a,'z'),1,strrpos(strstr($a,'z'),'-')-1);

于 2013-04-15T18:27:41.857 回答
0

这完全取决于源字符串的结构有多“稳定”。您可以substr()在开始时使用http://php.net/substrstrstr() http://php.net/strstr

于 2013-04-15T18:18:11.730 回答