我对preg_match的使用很新颖。在发布这个问题之前搜索了很多答案。发现了很多帖子来获取基于YouTube的ID等数据,但没有根据我的需要。如果它的愚蠢问题,请原谅我。如何使用preg_match提取数据?
我需要从带有preg_match的字符串中获取ID。字符串的格式为
[#1234] Subject
如何从字符串中只提取“1234”?
我对preg_match的使用很新颖。在发布这个问题之前搜索了很多答案。发现了很多帖子来获取基于YouTube的ID等数据,但没有根据我的需要。如果它的愚蠢问题,请原谅我。如何使用preg_match提取数据?
我需要从带有preg_match的字符串中获取ID。字符串的格式为
[#1234] Subject
如何从字符串中只提取“1234”?
一种解决方案是:
\[#(\d+)\]
这个模式匹配左括号和井号[#
,然后捕获一个或多个数字,则关闭右方括号]
。
你会用它喜欢:
preg_match('/\[#(\d+)\]/', '[#1234] Subject', $matches);
echo $matches[1]; // 1234
你可以看到它在this demo工作。
你可以试试这个:
preg_match('~(?<=\[#)\d+(?=])~', $txt, $match);
(?<=..)
是回顾后(仅一个检查)
(?=..)
是一个超前
你的正则表达式:这是一个
preg_match('/^\[\#([0-9]+)\].+/i', $string, $array);
你可以这样做:
<?php
$subject = "[#1234] Subject";
$pattern = '/^\[\#([0-9]+)/';
preg_match($pattern, $subject, $matches);
echo $matches[1]; // 1234
?>
,仅保留整数,你可以使用子模式http://php.net/manual/en/regexp.reference.subpatterns.php
$string="[#1234] Subject";
$pattern="/\[#(?P<my_id>\d+)](.*?)/s";
preg_match($pattern,$string,$match);
echo $match['my_id'];
它不工作,如果有像重新标识的任何前缀:[#1234]主题 – Mic
@Mic - 那不是在你原来的文章中,但是通过从正则表达式中删除'^'很容易修复。我会更新我的答案。 – nickb
对不起,如果我的问题造成混乱。 – Mic