我有一个语法如下变化的字符串:X-y12h-z13-1如何得到一个字符串的特定部分在PHP
我希望能够只得到整数“Z”后使用PHP。在这个例子中,它会是13.我不确定解决这个问题的最好方法,而且我在正则表达式上真的很糟糕。
任何帮助,非常感谢。
编辑:字符串的长度也可以在“z”整数值之前和之后变化。
我有一个语法如下变化的字符串:X-y12h-z13-1如何得到一个字符串的特定部分在PHP
我希望能够只得到整数“Z”后使用PHP。在这个例子中,它会是13.我不确定解决这个问题的最好方法,而且我在正则表达式上真的很糟糕。
任何帮助,非常感谢。
编辑:字符串的长度也可以在“z”整数值之前和之后变化。
<?php
preg_match('/(?<=z)\d+/', 'x-y12h-z13-1', $matches);
var_dump($matches[0]);
匹配一个或多个数字,在他们面前的Z组合开始http://php.net/substr使用substr()
。 http://codepad.viper-7.com/X5mu2m
这正是我正在寻找的!谢谢! – thomaskessel
然后,您应该注意并尽可能标记为已接受。 @thomaskessel – Jonast92
这一切都取决于源字符串结构的“稳定”。您可以在与strstr()
http://php.net/strstr
我曾考虑过这个问题,但字符串可以在“z”整数值之前和之后变化。 – thomaskessel
字符串长度可以更改的信息不在您的原始问题中。 –
您可以使用字符串函数也提取它,这里是例如:
$一个= '的x y12h-z13-1'; (strstr($ a,'z'),1,strrpos(strstr($ a,'z'),' - ') - 1);
如果 “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];
一般的正则表达式为你的字符串:
<?php
$value = preg_match('/^x-y(\d+)h-z(\d+)-(\d+)/','x-y12h-z13-1', $matches);
print_r($matches);
$匹配[2]包含'z'后的值
输出:
Array
(
[0] => x-y12h-z13-1
[1] => 12
[2] => 13
[3] => 1
)
此代码应该为你工作
$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;
$海峡将有你的字符串输出13
$your_integer = (int)substr($str, strpos($str, "z") + 1);
此发现的第一个Z和然后剪切该字符串关闭,包括z。
然后,我依靠PHP的铸造行为读取第一个字符,直到它找不到更多数字并将它们转换为整数。
$ num =(int)substr($ str,-4,3)在这种情况下会给你13个,但是如果字符串不固定并且每次都改变到不同的长度,那么你需要提供给我们更多的信息。 –
你应该真的给出更多的字符串样本,以及准确的规则是什么才能得到一个体面的答案。 – PeeHaa