PHP使用正则表达式从字符串中提取内容

PHP使用正则表达式从字符串中提取内容,php,regex,str-replace,Php,Regex,Str Replace,我有下面的字符串,我想从中提取“383-0408”,显然内容会发生变化,但零件号始终跟随字符串“我们的Stk:”,如何才能最优雅地从字符串中提取此信息 Microchip Technology Inc. 18 PIN, 7 KB FLASH, 256 RAM, 16 I/O Mfr's Part #: PIC16F648A-I/SO Our Stk #: 383-0408 如果我们不知道数字的长度,那么让我们假设空格是数字后的下一个字符,那么: $string = 'YOURSTRING

我有下面的字符串,我想从中提取“383-0408”,显然内容会发生变化,但零件号始终跟随字符串“我们的Stk:”,如何才能最优雅地从字符串中提取此信息

Microchip Technology Inc.
18 PIN, 7 KB FLASH, 256 RAM, 16 I/O 

Mfr's Part #: PIC16F648A-I/SO 
Our Stk #: 383-0408
如果我们不知道数字的长度,那么让我们假设空格是数字后的下一个字符,那么:

$string = 'YOURSTRING';
$offset = strpos($string, 'Out Stk #') + 11;
$end = strpos($string, ' ', $offset);
$final = substr($string, $offset, $end-$offset);
您可以使用:

if (preg_match( '/Our Stk #: ([0-9\\-]+)/', $str, $match ))
    echo $match[1];
您可以执行以下操作:

<?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];
}

我已经按照你的方式做了,但我发现其他答案更适合这个问题。@Richard86:我们也可以根据数字后面的下一个字符来计算长度。可能只是一个白色的space@Timothy我只想告诉未来的读者,即使这对我们大多数人来说可能是显而易见的。很多时候
substr()
是更好的选择。此解决方案更适合
数字形式,这可能就是@Timothy所使用的。无论如何,谢谢你给了我信任。(如果您想排除只有破折号的Stk(例如,
我们的Stk:-
),那么
(\d*-\d*)
可以更改为
(\d+-\d+
)@Richard86您完全正确。事实上,我将编辑答案来指出这一点。
<?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];

?>
<?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];
}
if (preg_match('/Our Stk #: (\d+-\d+)/', $str, $matches)) {