2013-08-03 85 views
2

我對preg_match的使用很新穎。在發佈這個問題之前搜索了很多答案。發現了很多帖子來獲取基於YouTube的ID等數據,但沒有根據我的需要。如果它的愚蠢問題,請原諒我。如何使用preg_match提取數據?

我需要從帶有preg_match的字符串中獲取ID。字符串的格式爲

[#1234] Subject 

如何從字符串中只提取「1234」?

回答

4

一種解決方案是:

\[#(\d+)\] 

這個模式匹配左括號和井號[#,然後捕獲一個或多個數字,則關閉右方括號]

你會用它喜歡:

preg_match('/\[#(\d+)\]/', '[#1234] Subject', $matches); 
echo $matches[1]; // 1234 

你可以看到它在this demo工作。

+0

它不工作,如果有像重新標識的任何前綴:[#1234]主題 – Mic

+0

@Mic - 那不是在你原來的文章中,但是通過從正則表達式中刪除'^'很容易修復。我會更新我的答案。 – nickb

+0

對不起,如果我的問題造成混亂。 – Mic

2

你可以試試這個:

preg_match('~(?<=\[#)\d+(?=])~', $txt, $match); 

(?<=..)是回顧後(僅一個檢查)

(?=..)是一個超前

1

你的正則表達式:這是一個

preg_match('/^\[\#([0-9]+)\].+/i', $string, $array); 
1

你可以這樣做:

<?php 
$subject = "[#1234] Subject"; 
$pattern = '/^\[\#([0-9]+)/'; 
preg_match($pattern, $subject, $matches); 

echo $matches[1]; // 1234 
?>