下方有长字符串
$raw = "bk-pon@huawei-bangrak-fl5.bangkok xpon 0/3/0/1:4.1.3499"
我想得到下面的子字符串
$Slot = "0/3/0" <- space_value1_slash_value2_slash_value3
$Port1 = 1 <- the number between last slash and :
$Port2 = 1:4:1.3499 <- the value after last slash until end of string or until found space
如何编写PHP来提取$slot、$port和$port2?我认为PHP代码应该如下所示,但我不知道如何在xxx、yyy和zzz中编写正则表达式,
$raw = "bk-pon@huawei-bangrak-fl5.bangkok xpon 0/3/0/1:4.1.3499";
$pattern_slot="xxxxxx";
$pattern_port1="yyyyyy";
$pattern_port2="zzzzzzz";
preg_match_all($pattern_slot, $raw, $slot);
preg_match_all($pattern_port1, $raw, $port1);
preg_match_all($pattern_port2, $raw, $port2);
echo "<br> Slot = ".$slot[0][0];
echo "<br> Port1 = ".$port1[0][0];
echo "<br> Port2 = ".$port2[0][0];
请帮助我,或者任何关于这方面的好教程都将不胜感激。感谢您的反馈。
怎么样:
preg_match('#'s('d+/'d+/'d+)/(('d+):'d+'.'d+'.'d+)$#', $string, $matches);
// group 1 ^___________^ || | |
// group 3 |^___^ |
// group 2 ^___________________^
slot
在第1组
第3组Port1
第2组中的Port2
组号由左括号的计数定义。
根据评论进行编辑:
preg_match('#^('S+)'s'w+'s('d+/'d+/'d+)/(('d+):'d+'.'d+'.'d+)$#', $string, $matches);
email
是第1组slot
在第2组
第4组Port1
第3组中的Port2
试试这个,从$m
中查找1,2,3
索引
$raw = "bk-pon@huawei-bangrak-fl5.bangkok xpon 0/3/0/1:4.1.3499";
preg_match('~('d+/'d+/'d+)/(?=('d+))(.*)~', $raw, $m);
print_r($m);
输出:
Array
(
[0] => 0/3/0/1:4.1.3499
[1] => 0/3/0
[2] => 1
[3] => 1:4.1.3499
)
Regex的详细介绍可以在http://www.regular-expressions.info/您可以在这里测试您的正则表达式:http://regexpal.com/以及许多其他谷歌链接;)
如果字符串的末尾总是保持相同的长度,那么只需使用PHP的substr
方法和-16(或者不管它有多少个字符)。
否则,您可以使用/([0-9/]+)+'':([0-9.]+)/之类的东西,然后解析出数据。
尝试使用:
preg_match('~('d+/'d+/'d+)/(('d+):[^ ]*)~', $raw, $matches);
list(, $slot, $port2, $port1) = $matches;
输出:
// slot
string '0/3/0' (length=5)
// port1
string '1' (length=1)
// port2
string '1:4.1.3499' (length=10)