2011-05-14 58 views
3

我有以下字符串,我想從中提取「383-0408」,顯然內容會改變,但部件號總是跟在字符串「我們的Stk#:」 ,我怎麼能最優雅地從字符串中提取這些信息?PHP使用正則表達式從字符串中提取內容

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

Mfr's Part #: PIC16F648A-I/SO 
Our Stk #: 383-0408 

回答

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)) { 
+0

這個解決方案最好適合'digits-digits'的形式,這可能是@Timothy使用的。無論如何感謝您給予信任。 (如果你想用一個短劃線(例如'Our Stk#:-')排除一個Stk#,那麼'(\ d * - \ d *)'可以改爲'(\ d + - \ d +)' ) – AndersTornkvist 2011-05-14 18:32:37

+0

@ Richard86你完全正確。的確,我會編輯答案來指出這一點。 – 2011-05-14 19:14:13

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); 
+0

這將工作如果Stk#的長度總是8個字符。 – AndersTornkvist 2011-05-14 17:52:19

+0

我已經完成了你的工作,但我發現其他答案更適合於這個問題。 – 2011-05-14 18:13:47

+0

@ Richard86:根據數字後面的下一個字符,我們可以找到它的長度..可能只是一個空白區域 – Jaanus 2011-05-14 18:26:36

2

你可以使用:

if (preg_match('/Our Stk #: ([0-9\\-]+)/', $str, $match)) 
    echo $match[1]; 
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]; 

?> 
相關問題