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

时间:2011-05-14 17:39:00

标签: php regex str-replace

我有以下字符串,我想从中提取“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

4 个答案:

答案 0 :(得分:2)

$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);

答案 1 :(得分:2)

您可以使用:

if (preg_match( '/Our Stk #: ([0-9\\-]+)/', $str, $match ))
    echo $match[1];

答案 2 :(得分:2)

你可以这样做:

<?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)) {

答案 3 :(得分: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];

?>