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

最佳答案

你可以:

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

10-08 09:28