2013-08-03 60 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 
?>