我有以下字符串,我想从中提取“383-0408”,显然内容会改变,但是零件号始终跟随字符串“Our Stk#:”,我该如何最优雅地从字符串中提取此信息?
Microchip Technology Inc.
18 PIN, 7 KB FLASH, 256 RAM, 16 I/O
Mfr's Part #: PIC16F648A-I/SO
Our Stk #: 383-0408
我有以下字符串,我想从中提取“383-0408”,显然内容会改变,但是零件号始终跟随字符串“Our Stk#:”,我该如何最优雅地从字符串中提取此信息?
Microchip Technology Inc.
18 PIN, 7 KB FLASH, 256 RAM, 16 I/O
Mfr's Part #: PIC16F648A-I/SO
Our Stk #: 383-0408
你可以这样做:
<?php
$str = "Microchip Technology Inc.
18 PIN, 7 KB FLASH, 256 RAM, 16 I/O
Mfr's Part #: PIC16F648A-I/SO
Our Stk #: 383-0408";
if (preg_match('/Our Stk #: (\d*-\d*)/', $str, $matches)) {
echo $matches[1];
}
只有当您要查找的数字部分始终具有“digits-digits”的形式时,此方法才有效。@Richard86为您的问题提供了另一个通用解决方案,可以处理任何数字和任意数量的破折号。
编辑:
为了避免在破折号周围没有数字的情况下,如@Richard86在评论中所说,正则表达式应该像这样:
if (preg_match('/Our Stk #: (\d+-\d+)/', $str, $matches)) {
$string = 'YOURSTRING';
$offset = strpos($string, 'Out Stk #') + 11;
$final = substr($string, $offset, 8);
如果我们不知道数字的长度,然后假设在数字后面是空格,那么:
$string = 'YOURSTRING';
$offset = strpos($string, 'Out Stk #') + 11;
$end = strpos($string, ' ', $offset);
$final = substr($string, $offset, $end-$offset);
substr()
是更好的选择。 - AndersTornkvist你可以使用:
if (preg_match( '/Our Stk #: ([0-9\\-]+)/', $str, $match ))
echo $match[1];
<?php
$text = "Microchip Technology Inc.
18 PIN, 7 KB FLASH, 256 RAM, 16 I/O
Mfr's Part #: PIC16F648A-I/SO
Our Stk #: 383-0408";
preg_match('/Our Stk #: (.*)/', $text, $result);
$stk = $result[1];
?>
数字-数字
的形式,这可能是 @Timothy 使用的方式。无论如何,感谢您提供了证书。 (如果要排除只有破折号的 Stk#(例如Our Stk#:-
),则可以将(\ d * - \ d *)
更改为(\ d + - \ d +)
。) - AndersTornkvist